Method and apparatus for using a storage system as main memory

ABSTRACT

A data access system including a processor, multiple cache modules for the main memory, and a storage drive. The cache modules include a FLC controller and a main memory cache. The multiple cache modules function as main memory. The processor sends read/write requests (with physical address) to the cache module. The cache module includes two or more stages with each stage including a FLC controller and DRAM (with associated controller). If the first stage FLC module does not include the physical address, the request is forwarded to a second stage FLC module. If the second stage FLC module does not include the physical address, the request is forwarded to the storage drive, a partition reserved for main memory. The first stage FLC module has high speed, lower power operation while the second stage FLC is a low-cost implementation. Multiple FLC modules may connect to the processor in parallel.

1. FIELD OF THE INVENTION

The present disclosure relates to integrated circuits and computersystems, and more particularly to computer main memory.

2. BACKGROUND

Computing devices (servers, PC's, mobile phones, tablets, etc.).typically include a processor or system-on-chip (SoC). FIG. 1 shows anexample of a device 10 that includes a processor or SoC 12 and mainmemory made of one or more dynamic random access memories (DRAMs) 14.The DRAMs 14 can be implemented as one or more integrated circuits thatare connected to but separate from the SoC 12. The device 10 can alsoinclude one or more storage drives 16 connected to ports 17 of the SoC12. The storage drives 16 can include flash memory, solid-state drives,hard disk drives, and/or hybrid drives. A hybrid drive includes asolid-state drive with solid-state memory and a hard disk drive withrotating storage media.

The SoC 12 can include one or more image processing devices 20, a systembus 22 and a memory controller 24. Each of the image processing devices20 can include, for example: a control module 26 with a centralprocessor (or central processing unit (CPU)) 28; a graphics processor(or graphics processing unit (GPU)) 30; a video recorder 32; a cameraimage signal processor (ISP) 34; an Ethernet interface such as a gigabit(Gb) Ethernet interface 36; a serial interface such as a universalserial bus (USB) interface 38 and a serial advanced technologyattachment (SATA) interface 40; and a peripheral component interconnectexpress (PCIe) interface 42. The image processing devices 20 access theDRAMs 14 via the system bus 22 and the memory controller 24. The DRAMs14 are used as main memory. For example, one of the image processingdevices 20 provides a physical address to the memory controller 24 whenaccessing a corresponding physical location in one of the DRAMs 14. Theimage processing devices 20 can also access the storage drives 16 viathe system bus 22.

The SoC 12 and/or the memory controller 24 can be connected to the DRAMs14 via one or more access ports 44 of the SoC 12. The DRAMs 14 storeuser data, system data, and/or programs. The SoC 12 can execute theprograms using first data to generate second data. The first data can bestored in the DRAMs 14 prior to the execution of the programs. The SoC12 can store the second data in the DRAMs 14 during and/or subsequent toexecution of the programs. The DRAMs 14 can have a high-bandwidthinterface and low-cost-per-bit memory storage capacity and can handle awide range of applications.

The SoC 12 includes cache memory, which can include one or more of alevel zero (L0) cache, a level one (L1) cache, a level two (L2) cache,or a level three (L3) cache. The L0-L3 caches are arranged on the SoC 12in close proximity to the corresponding ones of the image processingdevices 20. In the example shown, the control module 26 includes thecentral processor 28 and L1-L3 caches 50. The central processor 28includes a L0 cache 52. The central processor 28 also includes a memorymanagement unit (MMU) 54, which can control access to the caches 50, 52.

As the level of cache increases, the access latency and the storagecapacity of the cache increases. For example, L1 cache typically hasless storage capacity than L2 cache and L3 cache. However, L1 cachetypically has lower latency than L2 cache and L3 cache.

The caches within the SoC 12 are typically implemented as static randomaccess memories (SRAMs). Because of the close proximity of the caches tothe image processing devices 20, the caches can operate at the sameclock frequencies as the image processing devices 20. Thus, cachesexhibit shorter latency periods than the DRAMS 14.

The number and size of the caches in the SoC 12 depends upon theapplication. For example, an entry level handset (or mobile phone) maynot include an L3 cache and can have smaller sized L1 cache and L2 cachethan a personal computer. Similarly, the number and size of each of theDRAMs 14 depends on the application. For example, mobile phonescurrently have 4-12 gigabytes (GB) of DRAM, personal computers currentlyhave 8-32GB of DRAM, and servers currently have 32GB-512GB of DRAM. Ingeneral, cost increases with large amounts of main memory as the numberof DRAM chips increases.

In addition to the cost of DRAM, it is becoming increasingly moredifficult to decrease the package size of DRAM for the same amount ofstorage capacity. Also, as the size and number of DRAMs incorporated ina device increases, the capacitances of the DRAMs increase, the numberand/or lengths of conductive elements associated with the DRAMsincreases, and buffering associated with the DRAMs increases. Inaddition, as the capacitances of the DRAMs increase, the operatingfrequencies of the DRAM's decrease and the latency periods of the DRAMsincrease.

During operation, programs and/or data are transferred from the DRAMs 14to the caches in the SoC 12 as needed. These transfers have higherlatency as compared to data exchanges between (i) the caches, and (ii)the corresponding processors and/or image processing devices. For thisreason, accesses to the DRAMs 14 are minimized by building SOC's withlarger L3 caches. Yet despite having larger and larger L3 caches, everyyear computing systems still need more and more DRAM's (larger mainmemory). With all else being equal, a computer with a larger main memorywill have better performance than a computer with smaller main memory.With today's operating systems, a modern PC with a 4GB main memory wouldin fact perform extremely poorly even if it is equipped with the fastestand best processor. The reason why computer main memory size keepsincreasing over time is explained next.

During boot up, programs can be transferred from the storage drives 16to the DRAMs 14. For example, the central processor 28 can transferprograms from the storage drive 16 to the DRAMs 14 during the boot up.Only when the programs are fully loaded to the DRAM's can centralprocessor 28 executes the instructions stored in the DRAMs. If the CPUneeds to run a program one at a time and the user is willing to waitwhile the CPU kills the previous program before launching a new program,the computer system would indeed require very small amount of mainmemory. However, this would be unacceptable to consumers which are nowaccustomed to instant response time when launching new programs andswitching between programs on the fly. This is why every year computersalways need more DRAMs and that establishes the priority of DRAMcompanies to manufacture larger DRAMs.

SUMMARY

To overcome the drawbacks of the prior art and provide additionalbenefits, a data storage and access system for use with a processor isdisclosed. The processor is configured to generate a data request fordata and the data request may include a physical address. In thisembodiment an FLC cache system is used to virtualize the computer mainmemory so that main memory could now be made of much lower cost memorydevices such as flash memory and computer could be built using muchsmaller capacity DRAMs than previously possible. The FLC systemcomprises a first FLC module having a first FLC controller and firstmemory, such that the first FLC module receives the data request fromthe processor. A second FLC module includes a second FLC controller andsecond memory. The first FLC module receives, responsive to the firstFLC module not having the data requested by the processor, the datarequest from the first FLC module. A storage drive is provided and isconfigured with a user file storage portion/partition and a main memoryportion/partition. The storage drive receives the data request when thesecond FLC module does not have the data requested by the first FLCmodule. By employing a two stage FLC system the first FLC module is nowfree to mostly serve the processor requests while the second FLC moduleis freed to move data in an out of the storage drive without impactingthe performance of the first FLC module.

In one embodiment, the data request includes a physical address andfirst FLC controller includes a loop-up table configured to translatethe physical address to a first virtual address if the first FLCcontroller contains the physical address entry. If the first FLCcontroller look-up table does not contain the physical address entry,then the first FLC controller is configured to forward the data requestwith the physical address to the second FLC controller. The termsphysical address and physical address entry may be used interchangeableherein. The second FLC controller may include a loop-up table configuredto translate the physical address to a second virtual address. Further,if the second FLC controller look-up table does not contain the physicaladdress, the second FLC controller is configured to forward the datarequest with the physical address to the storage drive.

In one embodiment, the first FLC module is optimized for significantlyfaster access time, lower latency and lower power consumption than thesecond FLC module at the expense of higher cost on per bit basis thanthat of traditional DRAM main memory. However, because the first FLCmodule memory capacity is much smaller than the second FLC module thecost increase is practically negligible and, more importantly,significant cost saving has already been achieved by moving the mainmemory into a storage drive. In one configuration, the first memory is acustom-made DRAM and includes a first memory controller and the secondmemory is made of off the shelf commodity DRAMs and includes a secondmemory controller. The storage drive preferably uses reasonably fastsolid state memory since the actual main memory is physically now in thestorage drive. Any misses to the second FLC module would be thousandtimes slower than traditional main memory accesses when using DRAMs andits impact has to be minimized. This is the reason why FLC fullyassociative and large cache line technology is proposed and isfundamental to keep the miss rates to be negligible. The first FLCmodule and the second FLC module may additionally be configured toperform predictive fetching of data stored at addresses expected to beaccessed in the future. Moreover, FLC modules may also be configured totake hints (instructions) from the processor or software to performprefetching of data into first FLC module and/or second FLC module fromthe final main memory that now resides in the storage drive. In oneembodiment, the software executing on the processing device may knowwhat data (including code) is next require and may provide aninstruction to the FLC system to pre-fetch that data into the DRAM cacheso that needed data is there when needed. It may be cached in thestandard speed FLC or the high speed FLC. IN one embodiment, thousandsof cache lines are prefetched. Accurate pre-fetching may lead to a 100%hit rate.

Also disclosed herein is a method of operating a data access system. Inthis embodiment, the data access system comprises a processor havingprocessor cache, a storage drive, a first FLC module which includes afirst FLC controller and a first DRAM and a second FLC module whichincludes a second FLC controller and a second DRAM. This method includesgenerating, with the processor, a request for data which includes aphysical address, and providing the request for data to the first FLCmodule. With the first FLC module, determining if the first FLCcontroller contains the physical address entry and responsive to thefirst FLC controller containing the physical address entry, retrievingthe data from the first DRAM and providing the data to the processor.Alternatively, responsive to the first FLC controller not containing thephysical address entry, forwarding the request for data and the physicaladdress to the second FLC module. At the second FLC module, determiningif the second FLC controller contains the physical address entry, andresponsive to the second FLC controller containing the physical addressentry, retrieving the data (in the form of a complete cache line entryrelated to the requested data) from the second DRAM and providing therequested cache line data (data stored in a cache line) to the first FLCmodule.

This method may further comprise responsive to the second FLC controllernot containing the physical address, forwarding the request for data (inthe form of a cache line corresponding to the requested data) and thephysical address to the storage drive. This method may also include thestorage drive retrieving the data from a portion of the storage drivereserved as additional main memory, and then providing the data (cacheline) to the second FLC module. In addition, responsive to the first FLCcontroller containing the physical address and the providing of the datato the processor, the FLC controller updates a status registerreflecting the recent use of a cache line containing the data.

In one embodiment, retrieving the data from the second DRAM andproviding the data to the first FLC module further comprises storing thephysical address in the first FLC controller and storing the data in thefirst DRAM. If the first DRAM does not have available free space, thenremoving least recently used data from the first DRAM and the first FLCaddress look up entry table to make space for the new data. In yetanother embodiment, FLC modules may proactively make a portion of theDRAMs available for future processor requests. The first FLC module mayalso proactively make a portion of its DRAMs to be clean so that, ondemand, it could erase the entries stored at the cache lines to becleaned to make room for new entries for new processor requests. This isdone by writing back dirty cache lines to the second FLC module. Uponhints (pre-fetch requests) from the operating system programs/data thatno longer needed could furthermore be erased from the FLC DRAM's. Thissaves time and power. It furthermore prevents accidental writes to SSDwhenever a no longer used program/data is purged to the SSD. In oneembodiment, the second stage DRAM (referred to herein as DRAM-SS) isabout eight times larger than the first stage DRAM. In one embodiment aportion of the second stage DRAM is proactively maintained as clean(emptied) to make room for all or a portion of the first stage DRAMbeing moved to the second stage DRAM. In one embodiment, at least tenpercent of the second stage DRAM is maintained as clean or on demandcleaned for prefetching of data or for first stage DRAM contents to bemoved to the second stage. In one embodiment, at least half of the sizeof the first stage DRAM is maintained as empty or cleanable in thesecond stage DRAM. In one embodiment, the second stage DRAM is at leastfour times larger than the first stage DRAM. In one embodiment, thesecond stage DRAM is at least eight times larger than the first stageDRAM. In one embodiment, the second stage DRAM is at least sixteen timeslarger than the first stage DRAM.

Also disclosed herein is a data storage and access system having severalelements include a processor having processor cache. The processor isconfigured to generate a first data request for first data. Also part ofthis system is a first FLC cache system that communicates with theprocessor. The first FLC cache system is configured to function as asuper-fast main memory cache (faster than the second FLC cache system),with an extremely high hit rates (99.9%), receives the first datarequest for the first data. In one embodiment the first FLC cache (HS)is at least two times as fast the second FLC cache (SS). In oneembodiment the first FLC cache (HS) is at least four times as fast thesecond FLC cache (SS). The first FLC cache system is also designed forkeeping track of tens of thousands of independent threads that would beneeded by the processor. A second FLC cache system is provided, and itcommunicates to the first FLC and is configured to function as asecondary (backup) main memory cache for the first FLC and receive thesecond data request for the second data. A storage drive is configuredwith a user file storage partition and a main memory partition such thatthe main memory partition of the storage drive functions as the actualmain memory. Alternatively, a separate and dedicated storage drive maybeused as the actual main memory. Furthermore, preferably the main memorypartition of the storage drive is configured for high reliability. ForNand flash based storage drive the main memory partition is preferablyconfigured with Single Level Cells (SLC) instead of the traditionalTriple or Quad Level Cells (TLC/QLC).

This system may further comprise a system bus where the processorcommunicates with multiple slices of independent FLC cache modules overthe system bus. In one configuration, if the first data requested by theprocessor is not contained in the first slice FLC cache system, then thefirst data request is sent to the storage drive to retrieve the firstdata from the main memory partition of the storage drive, and if yet adifferent first data requested by the processor is not contained in thesecond slice FLC cache system, then the first data request is sent tothe storage drive to retrieve the first data from the main memorypartition of the storage drive. It is contemplated that the first sliceFLC cache system may comprise of a first stage FLC module and a secondstage FLC module, and the second slice FLC cache system may comprise ofa first stage FLC module and a second stage FLC module. In addition,each of the FLC modules should include a dedicated FLC controller,address look up tables, and memory.

Further areas of applicability of the present disclosure will becomeapparent from the detailed description, the claims and the drawings. Thedetailed description and specific examples are intended for purposes ofillustration only and are not intended to limit the scope of thedisclosure.

Other systems, methods, features and advantages of the invention will beor will become apparent to one with skill in the art upon examination ofthe following figures and detailed description. It is intended that allsuch additional systems, methods, features and advantages be includedwithin this description, be within the scope of the invention, and beprotected by the accompanying claims.

BRIEF DESCRIPTION OF DRAWINGS

The components in the figures are not necessarily to scale, emphasisinstead being placed upon illustrating the principles of the invention.In the figures, like reference numerals designate corresponding partsthroughout the different views.

FIG. 1 is a functional block diagram of a device according to the priorart.

FIG. 2 is a functional block diagram of a data access system inaccordance with an embodiment of the present disclosure.

FIG. 3 is a functional block diagram illustrating entries of a DRAM anda storage drive of the data access system of FIG. 2 .

FIG. 4 illustrates a method of operating the data access system of FIG.2 .

FIG. 5A is a block diagram of an example embodiment of a cascaded FLCsystem.

FIG. 5B is a block diagram of an example embodiment of a FCL controller.

FIG. 6 is a block diagram of a cascaded FLC modules having two or moreFLC modules.

FIG. 7 is an operation flow diagram of an example method of operation ofthe cascaded FLC modules as shown in FIG. 5A.

FIG. 8 is a block diagram of a split FLC module system having two ormore separate FLC modules.

FIG. 9 is an operation flow diagram of an example method of operation ofthe split FLC modules as shown in FIG. 8 .

FIG. 10 is an exemplary block diagram of an example embodiment of acascaded FLC system with a bypass path.

FIG. 11 is an operation flow diagram of an example method of operationof the split FLC modules as shown in FIG. 8 .

FIG. 12 is an exemplary block diagram of an example embodiment of acascaded FLC system with a bypass path and non-cacheable data path.

FIG. 13 provides operational flow chart of an exemplary method ofoperation for the embodiment of FIG. 12 .

In the drawings, reference numbers may be reused to identify similarand/or identical elements.

DESCRIPTION

At least some of the following examples include final level cache (FLC)modules and storage drives. The FLC modules are used as main memorycache and the storage drives are used as physical storage for user filesand also a portion of the storage drive is partitioned for use by theFLC modules as the actual main memory. This is in contrast oftraditional computers where the actual main memory is made of DRAMs.Data is first attempted to be read from or written to the DRAM of theFLC modules with the main memory portion of the physical storage driveproviding the last resort back up in the event of misses from FLCmodules. Look up tables in the FLC modules are referred to herein ascontent addressable memory (CAM). FLC controllers of the FLC modulescontrol access to the memory in the FLC modules and the storage drivesusing various CAM techniques described below. The CAM techniques andother disclosed features reduce the required storage capability of theDRAM in a device while maximizing memory access rates and minimizingpower consumption. The device may be a mobile computing device, desktopcomputers, server, network device or a wireless network device. Examplesof devices include but are not limited to a computer, a mobile phone, atablet, a camera, etc. The DRAM in the following examples is generallynot used as main memory, but rather is used as caches of the much slowermain memory that is now located in a portion the storage drive. Thus,the partition of the storage drive is the main memory and the DRAM iscache of the main memory.

FIG. 2 shows a data access system 70 that includes processing devices72, a system bus 74, a FLC module 76, and a storage drive 78. The dataaccess system 70 may be implemented in, for example, a computer, amobile phone, a tablet, a server and/or other device. The processingdevices 72 may include, for example: a central processor (or centralprocessing unit (CPU)); a graphics processor (or graphics processingunit (GPU)); a video recorder; a camera signal processor (ISP); anEthernet interface such as a gigabit (Gb) Ethernet interface; a serialinterface such as a universal serial bus (USB) interface and a serialadvanced technology attachment (SATA) interface; and a peripheralcomponent interconnect express (PCIe) interface; and/or other imageprocessing devices. The processing devices 72 may be implemented in oneor more modules. As an example, a first one of the processing modules 72is shown as including cache memory, such as one or more of a level zero(L0) cache, a level one (L1) cache, a level two (L2) cache, or a levelthree (L3) cache. In the example shown, the first processing device mayinclude a central processor 73 and L1-L3 caches 75. The centralprocessor 73 may include a L0 cache 77. The central processor 73 mayalso include a memory management unit (MMU) 79 which can control accessto the processor caches 75, 77. The MMU 79 may also be considered amemory address translator for the processor caches. The MMU isresponsible for translating CPU virtual address to system physicaladdress. Most modern CPUs use physical address caches, meaningL0/L1/L2/L3 caches are physically addressed. Cache misses from CPU alsogoes out to the system bus using physical address.

Tasks described below as being performed by a processing device may beperformed by, for example, the central processor 73 and/or the MMU 79.

The processing devices 72 are connected to the FLC module 76 via thesystem bus 74. The processing devices 72 are connected to the storagedrive 78 via the bus and interfaces (i) between the processing devices72 and the system bus 74, and (ii) between the system bus 74 and thestorage drive 78. The interfaces may include, for example, Ethernetinterfaces, serial interfaces, PCIe interfaces and/or embeddedmulti-media controller (eMMC) interfaces. The storage drive 78 may belocated anywhere in the world away from the processing devices 72 and/orthe FLC controller 80. The storage drive 78 may be in communication withthe processing devices 72 and/or the FLC controller 80 via one or morenetworks (e.g., a WLAN, an Internet network, or a remote storage network(or cloud)).

The FLC module 76 includes a FLC controller 80, a DRAM controller 82,and a DRAM IC 84. The terms DRAM IC and DRAM are used interchangeable.Although referenced for understanding as DRAM, other types of memorycould be used include any type RAM, SRAM, DRAM, or any other memory thatperforms as described herein but with a different name. The DRAM IC 84is used predominately as virtual and temporary storage while the storagedrive 78 is used as physical and permanent storage. This implies thatgenerally a location in the DRAM IC has no static/fixed relationship tothe physical address that is generated by the processor module. Thestorage drive 78 may include a partition that is reserved for use asmain memory while the remaining portion of the storage drive is used astraditional storage drive space to store user files. This is differentthan prior art demand paging operations that would occur when thecomputer is out of physical main memory space in the DRAM. In that case,large blocks of data/programs from DRAM are transferred into and fromthe hard disk drive. This also entails deallocating and reallocatingphysical address assignments which is done by the MMU and the OperatingSystem, which is a slow process as operating system (OS) does not havesufficient nor it has precise information on the relative importance ofthe data/programs that are stored in the main memory. The processingdevices 72 address the DRAM IC 84 and the main memory partition of thestorage drive 78 as if they were a single main memory device. A userdoes not have access to and cannot view data or files stored in the mainmemory partition of the storage drive, in the same way that a user cannot see the files stored in RAM during computer operation. While readingand/or writing data, the processing devices 72 sends access requests tothe FLC controller 80. The FLC controller 80 accesses the DRAM IC 84 viathe DRAM controller 82 and/or accesses the storage drive 78. The FLCcontroller 80 may access the storage drive directly (as indicated bydashed line) or via the system bus 74. From processor and programmerpoint of view, accesses to the storage partition dedicated as mainmemory are done through processor native load and store operations andnot as I/O operations.

Various examples of the data access system 70 are described herein. In afirst example, the FLC module 76 is implemented in a SoC separate fromthe processing devices 72, the system bus 74 and the storage drive 78.In another embodiment, the elements are on different integratedcircuits. In a second example, one of the processing devices 72 is a CPUimplemented processing device. The one of the processing devices 72 maybe implemented in a SoC separate from the FLC module 76 and the storagedrive 78. As another example, the processing devices 72 and the systembus 74 are implemented in a SoC separate from the FLC module 76 and thestorage drive 78. In another example, the processing devices 72, thesystem bus 74 and the FLC module 76 are implemented in a SoC separatefrom the storage drive 78. Other examples of the data access system 70are disclosed below.

The DRAM IC 84 may be used as a final level of cache. The DRAM IC 84 mayhave various storage capacities. For example, the DRAM IC 84 may have1-2 GB of storage capacity for mobile phone applications, 4-8 GB ofstorage capacity for personal computer applications, and 16-64 GB ofstorage capacity for server applications.

The storage drive 78 may include NAND flash SSD or other non-volatilememory such as Resistive RAM and Phase Change Memory. The storage drive78 may have more storage capacity than the DRAM IC 84. For example, thestorage drive 78 may include 8-16 times more storage than the DRAM IC84. The DRAM IC 84 may include high-speed DRAM and the storage drive 78may, even in the future, be made of ultra-low cost and low-speed DRAM iflow task latency switching time is important. Ultimately a new class ofhigh capacity serial/sequential large-page DRAM (with limited randomaccessibility) could be built for the final main memory. Such a serialDRAM device could be at least two times more cost effective thantraditional DRAM as die size could be at least two times smaller thantraditional DRAM. In one embodiment, the serial DRAM would have aminimum block (chunk) size which could be retrieved or written at atime, such as one cache line (4 KB) but other embodiment a minimum blocksizes could be established. Thus, data not be read or written to anylocation, but instead only to/from certain block. Such serial DRAM couldfurthermore be packaged with an ultra-high speed serial interface toenable high capacity DRAM to be mounted far away from the processordevices which would enable processors to run at their full potentialwithout worrying about overheating. As shown, a portion of the storagedrive 78 is partitioned to serve as main memory and thus is utilized bythe FLC controller 80 as an extension of the FLC DRAM 84.

The cache line stored in the DRAM IC 84 may be data that is accessedmost recently, most often, and/or has the highest associated prioritylevel. The cache line stored in the DRAM IC 84 may include cache linethat is locked in. Cache line that is locked in refers to data that isalways kept in the DRAM IC 84. Locked in cache line cannot be kicked outby other cache lines even if the locked in cache line has not beenaccessed for a long period of time. Locked in cache line however may beupdated (written). In one embodiment defective DRAM cells (and itscorresponding cache line) may be locked out (mapped out) from the FLCsystem by removing a DRAM address entry that has defective cell(s) toprevent the FLC address look up engine from assigning a cache line entryto that defective DRAM location. The defective DRAM entries are normallyfound during device manufacturing. Yet in another embodiment, theoperating system may use the map out function to place a portion of DRAMinto a temporary state where it is unusable by the processor for normaloperations. Such function allows the operating system to issue commandsto check the health of the mapped out DRAM section one section at a timewhile the system is running actual applications. If a section of theDRAM is found with weak cells operating system may then proactivelydisable the cache line that contains the weak cell(s) and bring the socalled “weak cache line” out of service. In one embodiment FLC enginecould include hardware diagnostic functions to off load the processorfrom performing DRAM diagnostics in software.

In some example embodiments, the data stored in the DRAM IC 84 does notinclude software applications, fonts, software code, alternate code anddata to support different spoken languages, etc., that are notfrequently used (e.g., accessed more than a predetermined number oftimes over a predetermined period of time). This can aid in minimizingsize requirements of the DRAM IC 84. Software code that is used veryinfrequently or never at all could be considered as “garbage code” asfar as FLC is concerned and they may not be loaded by FLC during theboot up process and if they did get loaded and used only once forexample to be purged by FLC and never loaded anymore in the future thusfreeing up the space of the DRAM IC 84 for truly useful data/programs.As the size of the DRAM IC 84 decreases, DRAM performance increases andpower consumption, capacitance and buffering decrease. As capacitanceand buffering decrease, latencies decrease. Also, by consuming lesspower, the battery life of a corresponding device is increased. Overallsystem performance of course would increase with bigger DRAM IC 84 butthat comes at the expense of increase of cost and power.

The FLC controller 80 performs CAM techniques in response to receivingrequests from the processing devices 72. The CAM techniques includeconverting first physical address of the requests provided by theprocessing devices 72 to virtual addresses. These virtual addresses areindependent of and different than virtual addresses originally generatedby the processing devices 72 and mapped to the first physical addressesby the processing devices 72. The DRAM controller 82 converts (or maps)the virtual addresses generated by the FLC controller 80 to DRAMaddresses. If the DRAM addresses are not in the DRAM IC 84, the FLCcontroller 80 may (i) fetch the data from the storage drive 78, or (ii)may indicate to (or signal) the corresponding one of the processingdevices 72 that a cache miss has occurred. Fetching the data from thestorage drive 78 may include mapping the first physical addressesreceived by the FLC controller 80 to a second physical addresses toaccess the data in the storage drive 78. A cache miss may be detected bythe FLC controller 80 while translating a physical address to a virtualaddress.

FLC controller 80 may then signal one of the processing devices 72 ofthe cache miss as it accesses the storage drive 78 for the data. Thismay include accessing the data in the storage drive 78 based on thefirst (original) physical addresses through mapping of thefirst/original physical address to a storage address and then accessingthe storage drive 78 based on the mapped storage addresses.

CAM techniques are used to map first physical address to virtual addressin the FLC controller. The CAM techniques provide fully associativeaddress translation. This may include logically comparing the processorphysical addresses to all virtual address entries stored in a directoryof the FLC controller 80. Set associative address translation should beavoided as it would result in much higher miss rates which in returnwould reduce processor performance. A hit rate of data being located inthe DRAM IC 84 with a fully associative and large cache linearchitecture (FLC) after initial boot up may be as high as 99.9%depending on the size of the DRAM IC 84. The DRAM IC 84 in generalshould be sized to assure a near 100% medium term (minutes of time)average hit rate with minimal idle time of a processor and/or processingdevice. For example, this may be accomplished using a 1-2 GB DRAM IC formobile phone applications, 4-8 GB DRAM ICs for personal computerapplications, and 16-64 GB DRAM ICs for server applications.

FIG. 3 shows entries of the DRAM IC 84 and the storage drive 78 of thedata access system 70. The DRAM IC 84 may include DRAM entries_(00-XY).The storage drive 78 may have drive entries_(00-MN). Addresses of eachof the DRAM entries_(00-XY) may be mapped to one or more addresses ofthe drive entries_(00-MN). However, since the size of DRAM is smallerthan the size of storage device only a fraction of the storage devicecould at any given time be mapped to the DRAM entries. Portion of theDRAM could also be used for non-cacheable data as well as for storing acomplete address lookup table of the FLC controller if non-collisionfree lookup process is used instead of a true CAM process. The datastored in the DRAM entries_(00-XY) may include other metadata.

Each of the DRAM entries_(00-XY) may have, for example, 4KB of storagecapacity. Each of the drive entries_(00-MN) may also have 4KB of storagegranularity. If data is to be read from or written to one of the DRAMentries_(00-XY) and the one of the DRAM entries_(00-XY) is full and/ordoes not have all of the data associated with a request, a correspondingone of the drive entries_(00-MN) is accessed. Thus, the DRAM IC 84 andthe storage drive 78 are divided up into memory blocks of 4KB. Eachblock of memory in the DRAM IC 84 may have a respective one or moreblocks of memory in the storage drive 78. This mapping and division ofmemory may be transparent to the processing devices 72 of FIG. 2 .

During operation, one of the processing devices 72 may generate arequest signal for a block of data (or portion of it). If a block ofdata is not located in the DRAM IC 84, the FLC controller 80 may accessthe block of data in the storage drive 78. While the FLC controller 80is accessing the data from the storage drive 78, the FLC controller 80may send an alert signal (such as a bus error signal) back to theprocessing device that requested the data. The alert signal may indicatethat the FLC controller 80 is in the process of accessing the data froma slow storage device and as a result the system bus 74 is not ready fortransfer of the data to the processing device 72 for some time. If buserror signal is used, the transmission of the bus error signal may bereferred to as a “bus abort” from the FLC module 76 to the processingdevice and/or SoC of the processing device 72. The processing device 72may then perform other tasks while waiting for the FLC storagetransaction to be ready. The other processor tasks then may proceed tocontinue by using data already stored in, for example, one or morecaches (e.g., L0-L3 caches) in the SoC of the processing device andother data already stored in FLC DRAM. This also minimizes idle time ofa processor and/or processing device.

If sequential access is performed, the FLC controller 80 and/or the DRAMcontroller 82 may perform predictive fetching of data stored ataddresses expected to be accessed in the future. This may occur during aboot up and/or subsequent to the boot up. The FLC controller 80 and/orthe DRAM controller 82 may: track data and/or software usage; evaluateupcoming lines of code to be executed; track memory access patterns; andbased on this information predict next addresses of data expected to beaccessed. The next addresses may be addresses of the DRAM IC 84 and/orthe storage drive 78. As an example, the FLC controller 80 and/or theDRAM controller 82, independent of and/or without previously receiving arequest for data, may access the data stored in the storage drive 78 andtransfer the data to the DRAM IC 84.

The above-described examples may be implemented via servers in a network(may be referred to as a “cloud”). Each of the servers may include a FLCmodule (e.g., the FLC module 76) and communicate with each other. Theservers may share DRAM and/or memory stored in the DRAM ICs and thestorage drives. Each of the servers may access the DRAMs and/or storagedrives in other servers via the network. Each of the FLC modules mayoperate similar to the FLC module of FIG. 2 but may also access DRAMand/or memory in each of the other servers via the cloud. Signalstransmitted between the servers and the cloud may be encrypted prior totransmission and decrypted upon arrival at the server and/or networkdevice of the cloud. The servers may also share and/or access memory inthe cloud. As an example, a virtual address generated by a FLCcontroller of one of the servers may correspond to a physical addressin: a DRAM of the FLC module of the FLC controller; a storage drive ofthe one of the servers; a DRAM of a FLC module of one of the otherservers; a storage drive of one of the other servers; or a storagedevice of the cloud. The FLC controller and/or a processing device ofthe one of the servers may access the DRAM and/or memory in the otherFLC modules, storage drives, and/or storage devices if a cache missoccurs. In short, the storage device could be in the cloud or networkaccessible. This reduces the size and cost of a computing device if acloud located storage drive is utilized and as a result the computingdevice does not need a storage drive. While having the storage drive inthe cloud or network accessible may be slower than having the storagedrive co-located with the DRAM cache and processor, it allows thestorage drive to be shared among several different processing devicesand DRAM cache. In one example environment, a automobile may havenumerous processors arranged around the vehicle and each may beconfigured with a DRAM cache system. Instead of each processor alsohaving a SSD drive, a single SSD drive may be shared between all of theprocessing devices. With the very high hit rates disclosed herein, theSSD drive would rarely be accessed. Such an arrangement has the benefitof lower cost, small overall size, and easier maintenance.

The above-described examples may also be implemented in a data accesssystem including: a multi-chip module having multiple chips; a switch;and a primary chip having a primary FLC module. The multi-chip module isconnected to the primary chip module via the switch. Each of the FLCmodules may operate similar to the FLC module of FIG. 2 but may alsoaccess DRAM and/or memory in each of the other chips via the switch. Asan example, a virtual address generated by a FLC controller of one ofthe chips may correspond to a physical address in: a DRAM of the FLCmodule of the FLC controller; a storage drive of the one of the chips; aDRAM of a FLC module of one of the other chips; a storage drive of oneof the other chips; or a storage device of the cloud. The FLC controllerand/or a processing device of the one of the chips may access the DRAMand/or memory in the other FLC modules, storage drives, and/or storagedevices if a cache miss occurs.

As an example, each of the secondary DRAMs in the multi-chip module andthe primary DRAM in the primary chip may have 1GB of storage capacity. Astorage drive in the primary chip may have, for example, 64GB of storagecapacity. As another example, the data access system may be used in anautomotive vehicle. The primary chip may be, for example, a centralcontroller, a module, a processor, an engine control module, atransmission control module, and/or a hybrid control module. The primarychip may be used to control corresponding aspects of related systems,such as a throttle position, spark timing, fuel timing, transitionsbetween transmission gears, etc. The secondary chips in the multi-chipmodule may each be associated with a particular vehicle system, such asa lighting system, an entertainment system, an air-conditioning system,an exhaust system, a navigation system, an audio system, a video system,a braking system, a steering system, etc. and used to control aspects ofthe corresponding systems.

As yet another example, the above-described examples may also beimplemented in a data access system that includes a host (or SoC) and ahybrid drive. The host may include a central processor or otherprocessing device and communicate with the hybrid drive via aninterface. The interface may be, for example, a GE interface, a USBinterface, a SATA interface, a PCIe interface, or other suitableinterfaces. The hybrid drive includes a first storage drive and a secondstorage drive. The first storage drive includes an FLC module (e.g., theFLC module 76 of FIG.2). A FLC controller of the FLC module performs CAMtechniques when determining whether to read data from and/or write datato DRAM of the FLC module and the second storage drive.

As a further example, the above-described examples may also beimplemented in a storage system that includes a SoC, a first high speedDRAM cache (faster than the second DRAM cache), a second larger DRAMcache (larger than the first DRAM cache), and a non-volatile memory(storage drive). The SoC is separate from the first DRAM, the secondDRAM and the non-volatile memory. The first DRAM may store high-priorityand/or frequently accessed data. A high-percentage of data accessrequests may be directed to data stored in the first DRAM. As anexample, 99% or more of the data access requests may be directed to datastored in the first DRAM and the remaining 0.9% or less of the dataaccess requests may be directed to data stored in the second DRAM, andless than 0.1% of data to the non-volatile memory (main memory partitionin the storage drive). Low-priority and/or less frequently accessed datamay be stored in the second DRAM and/or the non-volatile memory. As anexample, a user may have multiple web browsers open which are stored inthe first DRAM (high speed DRAM). The second DRAM on the other hand hasa much higher capacity to store the numerous number of idle applications(such as idle web browser tabs) or applications that have low duty cycleoperation. The second DRAM should therefore be optimized for low cost byusing commodity DRAM and as such it would only have commodity DRAMperformance it would also exhibit longer latency than the first DRAM.Contents for the truly old applications that would not fit in the secondDRAM would then be stored in the non-volatile memory. Moreover, onlydirty cache line contents of first and/or second DRAM could be writtento the non-volatile memory prior deep hibernation. Upon wakeup from deephibernation, only the immediately needed contents would be brought backto second and first FLC DRAM caches. As a result, wakeup time from deephibernation could be orders of magnitude faster than computers usingtraditional DRAM main memory solution.

The SoC may include one or more control modules, an interface module, acache (or FLC) module, and a graphics module. The cache module mayoperate similar to the FLC module of FIG. 2 . The control modules areconnected to the cache module via the interface module. The cache moduleis configured to access the first DRAM, the second DRAM and thenon-volatile memory based on respective hierarchical levels. Each of thecontrol modules may include respective L1, L2, and L3 caches. Each ofthe control modules may also include one or more additional caches, suchas L4 cache or other higher-level cache. Many signal lines (orconductive elements) may exist between the SoC and the first DRAM. Thisallows for quick parallel and/or serial transfer of data between the SoCand the first DRAM. Data transfer between the SoC and the first DRAM isquicker than data transfer (i) between the SoC and the second DRAM, and(ii) between the SoC and the non-volatile memory.

The first DRAM may have a first portion with a same or higherhierarchical level than the L3 cache, the L4 cache, and/or thehighest-level cache. A second portion of the first DRAM may have a sameor lower hierarchical level than the second DRAM and/or the non-volatilememory. The second DRAM may have a higher hierarchical level than thefirst DRAM. The non-volatile memory may have a same or higherhierarchical level than the second DRAM. The control modules may changehierarchical levels of portions or all of each of the first DRAM, thesecond DRAM, and/or the non-volatile memory based on, for example,caching needs.

The control modules, a graphics module connected to the interfacemodule, and/or other devices (internal or external to the SoC) connectedto the interface module may send request signals to the cache module tostore and/or access data in the first DRAM, the second DRAM, and/or thenon-volatile memory. The cache module may control access to the firstDRAM, the second DRAM, and the non-volatile memory. As an example, thecontrol modules, the graphics module, and/or other devices connected tothe interface module may be unaware of the number and/or size of DRAMsthat are connected to the SoC.

The cache module may convert the first processor physical addressesand/or requests received from the control modules, the graphics module,and/or other devices connected to the interface module to virtualaddresses of the first DRAM and the second DRAM, and/or storageaddresses of the non-volatile memory. The cache module may store one ormore lookup tables (e.g., fully set associative lookup tables) for theconversion of the first processor physical addresses to the virtualaddresses of the first and second DRAM's and/or conversion of the firstprocessor physical addresses to storage addresses. As a result, thecache module and one or more of the first DRAM, the second DRAM, and thenon-volatile memory (main memory partition of the storage drive) mayoperate as a single memory (main memory) relative to the controlmodules, the graphics module, and/or other devices connected to theinterface module. The graphics module may control output of video datafrom the control modules and/or the SoC to a display and/or the othervideo device.

The control modules may swap (or transfer) data, data sets, programs,and/or portions thereof between (i) the cache module, and (ii) the L1cache, L2 cache, and L3 cache. The cache module may swap (or transfer)data, data sets, programs and/or portions thereof between two or more ofthe first DRAM, the second DRAM and the non-volatile memory. This may beperformed independent of the control modules and/or without receivingcontrol signals from the control modules to perform the transfer. Thestorage location of data, data sets, programs and/or portions thereof inone or more of the first DRAM, the second DRAM and the non-volatilememory may be based on the corresponding priority levels, frequency ofuse, frequency of access, and/or other parameters associated with thedata, data sets, programs and/or portions thereof. The transferring ofdata, data sets, programs and/or portions thereof may includetransferring blocks of data. Each of the blocks of data may have apredetermined size. As an example, a swap of data from the second DRAMto the first DRAM may include multiple transfer events, where eachtransfer event includes transferring a block of data (e.g., 4 KB ofdata).

For best performance the cache module of the first DRAM must be fullyassociative with large cache line sizes (FLC cache solution). However,for applications that could tolerate much higher miss rates, a setassociative architecture could alternatively be used only for the firstlevel DRAM cache. But even that it would still have large cache linesizes to reduce the number of cache controller entry tables. As for thesecond level DRAM cache fully associative and large cache line cache areused as anything else may shorten the life of the non-volatile mainmemory.

The first DRAM may have a first predetermined amount of storage capacity(e.g., 0.25 GB, 0.5 GB, 1 GB, 4 GB or 8 GB). A 0.5 GB first DRAM is 512times larger than a typical L2 cache. The second DRAM may have a secondpredetermined amount of storage capacity (e.g., 2-8 GB or more fornon-server based systems or 16-64 GB or more server based systems). Thenon-volatile memory may have a third predetermined amount of storagecapacity (e.g., 16-256 GB or more). The non-volatile memory may includesolid-state memory, such as flash memory or magneto-resistive randomaccess memory (MRAM), and/or rotating magnetic media. The non-volatilememory may include a SSD and a HDD. Although the storage system has thesecond DRAM and the non-volatile memory (main memory partition of thestorage drive), either of the second DRAM and the non-volatile memorymay not be included in the storage system.

As a further example, the above-described examples may also beimplemented in a storage system that includes a SoC and a DRAM IC. TheSoC may include multiple control modules (or processors) that access theDRAM IC via a ring bus. The ring bus may be a bi-directional bus thatminimizes access latencies. If cost is more important than performance,the ring bus may be a unidirectional bus. Intermediary devices may belocated between the control modules and the ring bus and/or between thering bus and the DRAM IC. For example, the above-described cache modulemay be located between the control modules and the ring bus or betweenthe ring bus and the DRAM IC.

The control modules may share the DRAM IC and/or have designatedportions of the DRAM IC. For example, a first portion of the DRAM IC maybe allocated as cache for the first control module. A second portion ofthe DRAM IC may be allocated as cache for the second control module. Athird portion of the DRAM IC may be allocated as cache for the thirdcontrol module. A fourth portion of the DRAM IC may not be allocated ascache.

As a further example, the above-described examples may also beimplemented in a server system. The server system may be referred to asa storage system and include multiple servers. The servers includerespective storage systems, which are in communication with each othervia a network (or cloud). One or more of the storage systems may belocated in the cloud. Each of the storage systems may include respectiveSoCs.

The SoCs may have respective first DRAMs, second DRAMs, solid-statenon-volatile memories, non-volatile memories and I/O ports. The I/Oports may be in communication with the cloud via respective I/Ochannels, such as peripheral component interconnect express (PCIe)channels, and respective network interfaces, such as such as peripheralcomponent interconnect express (PCIe) channels. The I/O ports, I/Ochannels, and network interfaces may be Ethernet ports, channels andnetwork interfaces and transfer data at predetermined speeds (e.g., 1gigabit per second (Gb/s), 10Gb/s, 50Gb/s, etc.). Some of the networkinterfaces may be located in the cloud. The connection of multiplestorage systems provides a low-cost, distributed, and scalable serversystem. Multiples of the disclosed storage systems and/or server systemsmay be in communication with each other and be included in a network (orcloud).

The solid-state non-volatile memories may each include, for example,NAND flash memory and/or other solid-state memory. The non-volatilememories may each include solid-state memory and/or rotating magneticmedia. The non-volatile memories may each include a SSD and/or a HDD.

The architecture of the server system provides DRAMs as caches. TheDRAMs may be allocated as L4 and/or highest level caches for therespective SoCs and have a high-bandwidth and large storage capacity.The stacked DRAMs may include, for example, DDR3 memory, DDR4 memory,low power double data rate type four (LPDDR4) memory, wide-I/O2 memory,HMC memory, and/or other suitable DRAM. Each of the SoCs may have one ormore control modules. The control modules communicate with thecorresponding DRAMs via respective ring buses. The ring buses may bebi-directional buses. This provides high-bandwidth and minimal latencybetween the control modules and the corresponding DRAMs.

Each of the control modules may access data and/or programs stored: incontrol modules of the same or different SoC; in any of the DRAMs; inany of the solid-state non-volatile memories; and/or in any of thenon-volatile memories.

The SoCs and/or ports of the SoCs may have medium access controller(MAC) addresses. The control modules (or processors) of the SoCs mayhave respective processor cluster addresses. Each of the control modulesmay access other control modules in the same SoC or in another SoC usingthe corresponding MAC address and processor cluster address. Each of thecontrol modules of the SoCs may access the DRAMs. A control module of afirst SoC may request data and/or programs stored in a DRAM connected toa second SoC by sending a request signal having the MAC address of thesecond SOC and the processor cluster address of a second control modulein the second SoC.

Each of the SoCs and/or the control modules in the SoCs may store one ormore address translation tables. The address translation tables mayinclude and/or provide translations for: MAC addresses of the SoCs;processor cluster addresses of the control modules; processor physicaladdresses of memory cells in the DRAMs, the solid-state non-volatilememories, and the non-volatile memories; and/or physical block addressesof memory cells in the DRAMs, the solid-state non-volatile memories, andthe non-volatile memories. In one embodiment, the DRAM controllergenerates DRAM row and column address bits form a virtual address.

As an example, data and programs may be stored in the solid-statenon-volatile memories and/or the non-volatile memories. The data andprograms and/or portions thereof may be distributed over the network tothe SoCs and control modules. Programs and/or data needed for executionby a control module may be stored locally in the DRAMs, a solid-statenon-volatile memory, and/or a non-volatile memory of the SoC in whichthe control module is located. The control module may then access andtransfer the programs and/or data needed for execution from the DRAMs,the solid-state non-volatile memory, and/or the non-volatile memory tocaches in the control module. Communication between the SoCs and thenetwork and/or between the SoCs may include wireless communication.

As a further example, the above-described examples may also beimplemented in a server system that includes SoCs. Some of the SoCs maybe incorporated in respective servers and may be referred to as serverSoCs. Some of the SoCs (referred to as companion SoCs) may beincorporated in a server of a first SoC or may be separate from theserver of the first SoC. The server SoCs include respective: clusters ofcontrol modules (e.g., central processing modules); intra-cluster ringbuses, FLC modules, memory control modules, FLC ring buses, and one ormore hopping buses. The hopping buses extend (i) between the server SoCsand the companion SoCs via inter-chip bus members and correspondingports and (ii) through the companion SoCs. A hopping bus may refer to abus extending to and from hopping bus stops, adaptors, or nodes andcorresponding ports of one or more SoCs. A hopping bus may extendthrough the hopping bus stops and/or the one or more SoCs. A singletransfer of data to or from a hopping bus stop may be referred to as asingle hop. Multiple hops may be performed when transferring databetween a transmitting device and a receiving device. Data may travelbetween bus stops each clock cycle until the data reaches a destination.Each bus stop disclosed herein may be implemented as a module andinclude logic to transfer data between devices based on a clock signal.Also, each bus disclosed herein may have any number of channels for theserial and/or parallel transmission of data.

Each of the clusters of control modules has a corresponding one of theintra-cluster ring buses. The intra-cluster ring buses arebi-directional and provide communication between the control modules ineach of the clusters. The intra-cluster ring buses may have ring busstops for access by the control modules to data signals transmitted onthe intra-cluster ring buses. The ring bus stops may perform as signalrepeaters and/or access nodes. The control modules may be connected toand access the intra-cluster ring buses via the ring bus stops. Data maybe transmitted around the intra-cluster ring buses from a first controlmodule at a first one of the ring bus stops to a second control moduleat a second one of the ring bus stops. Each of the control modules maybe a central processing unit or processor.

Each of the memory control modules may control access to the respectiveone of the FLC modules. The FLC modules may be stacked on the serverSoCs. Each of the FLC modules includes a FLC (or DRAM) and may beimplemented as and operate similar to any of the FLC modules disclosedherein. The memory control modules may access the FLC ring buses atrespective ring bus stops on the FLC ring buses and transfer databetween the ring bus stops and the FLC modules. Alternatively, the FLCmodules may directly access the FLC ring buses at respective ring busstops. Each of the memory control modules may include memory clocks thatgenerate memory clock signals for a respective one of the FLC modulesand/or for the bus stops of the ring buses and/or the hopping buses. Thebus stops may receive the memory clock signals indirectly via the ringbuses and/or the hopping buses or directly from the memory controlmodules. Data may be cycled through the bus stops based on the memoryclock signal.

The FLC ring buses may be bi-directional buses and have two types ofring bus stops S_(RB) and S_(RH). Each of the ring bus stops may performas a signal repeater and/or as an access node. The ring bus stops S_(RB)are connected to devices other than hopping buses. The devices mayinclude: an inter-cluster ring bus0; the FLC modules and/or memorycontrol modules; and graphics processing modules. The inter-cluster ringbus provides connections (i) between the clusters, and (ii) betweenintersection rings stops. The intersection ring bus stops provide accessto and may connect the inter-cluster ring bus to ring bus extensionsthat extend between (i) the clusters and (ii) ring bus stops. The ringbus stops are on the FLC ring buses. The inter-cluster ring bus and theintersection ring bus stops provide connections (iii) between the firstcluster and the ring bus stop of the second FLC ring bus, and (iv)between the second cluster and the ring bus stop of the first FLC ringbus. This allows the control modules to access the FLC of the second FLCmodule and the control modules to access the FLC of the first FLCmodule.

The inter-cluster ring bus may include intra-chip traces and inter-chiptraces. The intra-chip traces extend internal to the server SoCs andbetween (i) one of the ring bus stops and (ii) one of the ports. Theinter-chip traces extend external to the server SoCs and betweenrespective pairs of the ports.

The ring bus stops S_(RH) of each of the server SoCs are connected tocorresponding ones of the FLC ring buses and hopping buses. Each of thehopping buses has multiple hopping bus stops S_(HB), which providerespective interfaces access to a corresponding one of the hoppingbuses. The hopping bus stops S_(HB) may perform as signal repeatersand/or as access nodes.

The first hopping bus, a ring bus stop, and first hopping bus stopsprovide connections between (i) the FLC ring bus and (ii) a liquidcrystal display (LCD) interface in the server SoC and interfaces of thecompanion SoCs. The LCD interface may be connected to a display and maybe controlled via the GPM. The interfaces of the companion SoC include aserial attached small computer system interface (SAS) interface and aPCIe interface. The interfaces of the companion SoC may be imageprocessor (IP) interfaces.

The interfaces are connected to respective ports, which may be connectedto devices, such as peripheral devices. The SAS interface and the PCIeinterface may be connected respectively to a SAS compatible device andPCIe compatible device via the ports. As an example, a storage drive maybe connected to the port. The storage drive may be a hard disk drive, asolid-state drive, or a hybrid drive. The ports may be connected toimage processing devices. Examples of image processing devices aredisclosed above. The fourth SoC may be daisy chained to the third SoCvia the inter-chip bus member (also referred to as a daisy chainmember). The inter-chip bus member is a member of the first hopping bus.Additional SoCs may be daisy chained to the fourth SoC via port, whichis connected to the first hopping bus. The server SoC, the controlmodules, and the FLC module may communicate with the fourth SoC via theFLC ring bus, the first hopping bus and/or the third SoC. As an example,the SoCs may be southbridge chips and control communication and transferof interrupts between (i) the server SoC and (ii) peripheral devicesconnected to the ports.

The second hopping bus provides connections, via a ring bus stop andsecond hopping bus stops, between (i) the FLC ring bus and (ii)interfaces in the server SoC. The interfaces in the server SoC mayinclude an Ethernet interface, one or more PCIe interfaces, and a hybrid(or combination) interface. The Ethernet interface may be a 10GEinterface and is connected to a network via a first Ethernet bus. TheEthernet interface may communicate with the second SoC via the firstEthernet bus, the network and a second Ethernet bus. The network may bean Ethernet network, a cloud network, and/or other Ethernet compatiblenetwork. The one or more PCIe interfaces may include as examples a thirdgeneration PCIe interface PCIe3 and a mini PCIe interface (mPCIe). ThePCIe interfaces may be connected to solid-state drives. The hybridinterface may be SATA and PCIe compatible to transfer data according toSATA and/or PCIe protocols to and from SATA compatible devices and/orPCIe compatible devices. As an example, the PCIe interface may beconnected to a storage drive, such as a solid-state drive or a hybriddrive. The interfaces have respective ports for connection to devicesexternal to the server SoC.

The third hopping bus may be connected to the ring bus via a ring busstop and may be connected to a LCD interface and a port via a hoppingbus stop. The LCD interface may be connected to a display and may becontrolled via the GPM. The port may be connected to one or morecompanion SoCs. The fourth hopping bus may be connected to (i) the ringbus via a ring bus stop, and (ii) interfaces via hopping bus stops. Theinterfaces may be Ethernet, PCIe and hybrid interfaces. The interfaceshave respective ports.

The server SoCs and/or other server SoCs may communicate with each othervia the inter-cluster ring bus. The server SoCs and/or other server SoCsmay communicate with each other via respective Ethernet interfaces andthe network.

The companion SoCs may include respective control modules. The controlmodules may access and/or control access to the interfaces via thehopping bus stops. In one embodiment, the control modules are notincluded. The control modules may be connected to and in communicationwith the corresponding ones of the hopping bus stops and/or thecorresponding ones of the interfaces.

As a further example, the above-described examples may also beimplemented in a circuit of a mobile device. The mobile device may be acomputer, a cellular phone, or other a wireless network device. Thecircuit includes SoCs. The SoC may be referred to as a mobile SoC. TheSoC may be referred to as a companion SoC. The mobile SoC includes: acluster of control modules; an intra-cluster ring bus, a FLC module, amemory control module, a FLC ring bus, and one or more hopping buses.The hopping bus extends (i) between the mobile SoC and the companion SoCvia an inter-chip bus member and corresponding ports and (ii) throughthe companion SoC.

The intra-cluster ring bus is bi-directional and provides communicationbetween the control modules. The intra-cluster ring bus may have ringbus stops for access by the control modules to data signals transmittedon the intra-cluster ring bus. The ring bus stops may perform as signalrepeaters and/or access nodes. The control modules may be connected toand access the intra-cluster ring bus via the ring bus stops. Data maybe transmitted around the intra-cluster ring bus from a first controlmodule at a first one of the ring bus stops to a second control moduleat a second one of the ring bus stops. Data may travel between bus stopseach clock cycle until the data reaches a destination. Each of thecontrol modules may be a central processing unit or processor.

The memory control module may control access to the FLC module. In oneembodiment, the memory control module is not included. The FLC modulemay be stacked on the mobile SoC. The FLC module may a FLC or DRAM andmay be implemented as and operate similar to any of the FLC modulesdisclosed herein. The memory control module may access the FLC ring busat a respective ring bus stop on the FLC ring bus and transfer databetween the ring bus stop and the FLC module. Alternatively, the FLCmodule may directly access the FLC ring bus a respective ring bus stop.The memory control module may include a memory clock that generates amemory clock signal for the FLC module, the bus stops of the ring busand/or the hopping buses. The bus stops may receive the memory clocksignal indirectly via the ring bus and/or the hopping buses or directlyfrom the memory control module. Data may be cycled through the bus stopsbased on the memory clock signal.

The FLC ring bus may be a bi-directional bus and have two types of ringbus stops S_(RB) and S_(RH). Each of the ring bus stops may perform as asignal repeater and/or as an access node. The ring bus stops S_(RB) areconnected to devices other than hopping buses. The devices may include:the cluster; the FLC module and/or the memory control module; and agraphics processing module.

The ring bus stops S_(RH) of the mobile SoC are connected to the FLCring bus and a corresponding one of the hopping buses. Each of thehopping buses has multiple hopping bus stops S_(HB), which providerespective interfaces access to a corresponding one of the hoppingbuses. The hopping bus stops S_(HB) may perform as signal repeatersand/or as access nodes.

The first hopping bus, a ring bus stop, and first hopping bus stops areconnected between (i) the FLC ring bus and (ii) a liquid crystal display(LCD) interface, a video processing module (VPM), and interfaces of thecompanion SoC. The LCD interface is in the server SoC and may beconnected to a display and may be controlled via the GPM. The interfacesof the companion SoC include a cellular interface, a wireless local areanetwork (WLAN) interface, and an image signal processor interface. Thecellular interface may include a physical layer device for wirelesscommunication with other mobile and/or wireless devices. The physicallayer device may operate and/or transmit and receive signals accordingto long-term evolution (LTE) standards and/or third generation (3G),fourth generation (4G), and/or fifth generation (5G) mobiletelecommunication standards. The WLAN interface may operate according toBluetooth®, Wi-Fi®, and/or other WLAN protocols and communicate withother network devices in a WLAN of the mobile device. The ISP interfacemay be connected to image processing devices (or image signal processingdevices) external to the companion SoC, such as a storage drive or otherimage processing device. The interfaces may be connected to devicesexternal to the companion SoC via respective ports. The ISP interfacemay be connected to devices external to the mobile device.

The companion SoC may be connected to the mobile SoC via the inter-chipbus member. The inter-chip bus member is a member of the first hoppingbus. Additional SoCs may be daisy chained to the companion SoC via aport, which is connected to the first hopping bus. The mobile SoC, thecontrol modules, and the FLC module may communicate with the companionSoC via the FLC ring bus and the first hopping bus.

The second hopping bus provides connections via a ring bus stop andsecond hopping bus stops between (i) the FLC ring bus and (ii)interfaces in the mobile SoC. The interfaces in the mobile SoC mayinclude an Ethernet interface, one or more PCIe interfaces, and a hybrid(or combination) interface. The Ethernet interface may be a 10GEinterface and is connected to an Ethernet network via a port. The one ormore PCIe interfaces may include as examples a third generation PCIeinterface PCIe3 and a mini PCIe interface (mPCIe). The PCIe interfacesmay be connected to solid-state drives. The hybrid interface may be SATAand PCIe compatible to transfer data according to SATA and/or PCIeprotocols to and from SATA compatible devices and/or PCIe compatibledevices. As an example, the PCIe interface may be connected to a storagedrive via a port. The storage drive may be a solid-state drive or ahybrid drive. The interfaces have respective ports for connection todevices external to the mobile SoC.

The companion SoC may include a control module. The control module mayaccess and/or control access to the VPM and the interfaces via thehopping bus stops. In one embodiment, the control module is notincluded. The control module may be connected to and in communicationwith the hopping bus stops, the VPM, and/or the interfaces.

Cache Line Size

In this example embodiment, cache line size of 4 KBytes is selected. Inother embodiments, other cache line sizes may be utilized. One benefitfrom using a cache line of this size is that it matches the size of amemory page size which is typically assigned, as the smallest memoryallocation size, by the operating system to an application or program.As a result, the 4 KByte cache line size aligns with the operatingmemory allocations size.

A processor typically only reads or writes 64 Bytes at a time. Thus, theFLC cache line size is much larger, using 4 KBytes as an example. As aresult, when a write or read request results in a miss at an FLC module,the system first reads a complete 4 KByte cache line from the storagedrive (i.e. the final level of main memory in the storage drivepartition). After that occurs, the system can write the processor datato the retrieved cache line, and this cache line is stored in a DRAM.Cache lines are identified by virtual addresses. Entire cache lines arepulled from memory at a time. Further, the entire cache line isforwarded, such as from the FLC-SS module to the FLC-HS module. Therecould be 100,000 or even 1 million and more cache lines in anoperational system.

Comparing the FLC module caching to the CPU cache, these elements areseparate and distinct caches. The CPU (processor cache) is part of theprocessor device as shown and is configured as in the prior art. The FLCmodules act as cache, serve as the main memory, and are separate anddistinct form the CPU caches. The FLC module cache tracks all the datathat is likely to be needed over several minutes of operation much as amain memory and associated controller would. However, the CPU cache onlytracks and stores what the processor needs or will use in the next fewmicroseconds or perhaps a millisecond.

Fully Associative FLC Caches

Fully associative look up enables massive numbers of truly randomprocessor tasks/threads to semi-permanently (when measured in seconds tominutes of time) reside in the FLC caches. This is a fundamental featureas the thousands of tasks or threads that the processors are working oncould otherwise easily trash (disrupt) the numerous tasks/threads thatare supposed to be kept in the FLC caches. Fully associative look up ishowever costly in terms of either silicon area, power or both.Therefore, it is also important that the FLC cache line sizes aremaximized to minimize the number of entries in the fully associativelook up tables. In fact, it is important that it should be much biggerthat CPU cache line sizes which is currently at 64B. At the same timethe cache line sizes should not be too big as it would cause unduehardships to the Operating System (OS). Since modern OS typically uses4KB page size FLC cache line size is therefore, in one exampleembodiment, set at 4KB. If, in the future, the OS page size is increasedto say 16KB, then the FLC cache line size could theoretically be made tobe 16KB as well.

In order to hide the energy cost of the fully associative address lookup process, in one embodiment, an address cache for the addresstranslation table is included in the FLC controller. It is important tonote that the address cache is not caching any processor data. Insteadit caches only the most recently seen address translations and thetranslations of physical addressed to virtual addresses. As such theoptional address cache does not have to be fully associative. A simpleset associative cache for the address cache is sufficient as even a 5%miss rate would already reduce the need to perform a fully associativelook up process by at least twenty times. The address cache wouldadditionally result in lower address translation latency as a simple setassociative cache used in it could typically translate an address in 1clock cycle. This is approximately ten to twenty times faster than thefastest multi stage hashing algorithm that could perform the CAM likeaddress translation operation.

Storage Drive Memory Allocation

The storage drive 78 may be a traditional non-volatile storage device,such as a magnetic disk drive, solid state drive, hybrid drive, opticdrive or any other type storage device. The DRAM associated with the FLCmodules, as well as partitioned portion of the storage drive, serves asmain memory. In the embodiment disclosed herein, the amount of DRAM isless than in a traditional prior art computing system. This provides thebenefits of less power consumption, lower system cost, and reduced spacerequirements. In the event additional main memory is required for systemoperation, a portion of the storage drive 78 is allocated or partitioned(reserved) for use as additional main memory. The storage drive 78 isunderstood to have a storage drive controller and the storage drivecontroller will process requests from the processing device 500 fortraditional file request and also requests from the FLC modules forinformation stored in the partition of the storage drive reserved as anextension of main memory.

FIG. 4 illustrates an exemplary method of operation of one examplemethod of operation. This is but one possible method of operation and assuch, other methods are contemplated that do not depart from the scopeof the claims. This exemplary method of operation is representative of aFLC controller system such as shown in FIG. 2 . Although the followingtasks are primarily described with respect to the examples in FIGS. 2 ,the tasks may apply to other embodiments in the present disclosure. Thetasks may be performed iteratively or in parallel.

This method starts at a step 408 where the system may be initialized. Ata step 412 the FLC controller receives a request from the possessingdevice (processor) for a read or write request. The request includes aphysical address that the processor uses to identify the location of thedata or where the data is to be written.

At a decision step 416, a determination is made whether the physicaladdress provided by the processor is located in the FLC controller. Thememory (SRAM) of the FLC controller stores physical to virtual addressmap data. The physical address being located in the FLC controller, isdesignated as a hit while the physical address not being located in theFLC controller is designated as a miss. The processor's request for data(with physical address) can only be satisfied by the FLC module if theFLC controller has the physical address entry in its memory. If thephysical address is not stored in the memory of the FLC controller, thenthe request must be forwarded to the storage drive.

If, at decision step 416 the physical address is identified in the FLCcontroller, then the request is considered a hit and the operationadvances to a step 420. At step 420 the FLC controller translates thephysical address to a virtual address based on a look-up operation usinga look-up table stored in a memory of the FLC controller or memory thatis part of the DRAM that is allocated for use by the FLC controller. Thevirtual address may be associated with a physical address in the FLCDRAM. The FLC controller may include one or more translation mappingtables for mapping physical addresses (from the processor) to virtualaddresses. FIG. 5B illustrates the FLC controller with its memory ingreater detail.

After translation of the physical address to a virtual address, theoperation advances to a decision step 424. If at decision step 416, thephysical address is not located in the FLC controller, a miss hasoccurred and the operation advances to step 428. At step 428, the FLCcontroller allocates a new (in this case empty) cache line in the FLCcontroller for the data to be read or written and which is not alreadyin the FLC module (i.e the DRAM of the FLC module). An existing cacheline could be overwritten if space is not otherwise available. Step 428includes updating the memory mapping to include the physical addressprovided by the processor, thereby establishing the FLC controller ashaving that physical address. Next, at a step 432 the physical addressis translated to a storage drive address, which is an address used bythe storage drive to retrieve the data. In this embodiment, the FLCcontroller performs this step but in other embodiment other devices,such as the storage drive may perform the translation. The storage driveaddress is an address that is used by or understood by the storagedrive. In one embodiment, the storage drive address is a PCI-e address.

At a step 436, the FLC controller forwards the storage address to thestorage drive, for example, a PCI-e based device, a NVMe (non-volatilememory express) type device, a SATTA SSD device, or any other storagedrive now known or developed in the future. As discussed above, thestorage drive may be a traditional hard disk drive, SSD, or hybrid driveand a portion of the storage drive is used in the traditional sense tostore files, such documents, images, videos, or the like. A portion ofthe storage drive is also used and partitioned as main memory tosupplement the storage capacity provided by the DRAM of the FLCmodule(s).

Advancing to a step 440, the storage drive controller (not shown)retrieves the cache line, at the physical address provided by theprocessor, from the storage drive and the cache line is provided to theFLC controller. The cache line, identified by the cache line address,stores the requested data or is designated to be the location where thedata is written. This may occur in a manner that is known in the art. Ata step 444, the FLC controller writes the cache line to the FLC DRAM andit is associated with the physical address, such that this associationis maintained in the loop-up table in the FLC controller.

Also part of step 444 is an update to the FLC status register todesignate the cache line or data as most recently used. The FLC statusregister, which may be stored in DRAM or a separate register, is aregister that tracks when a cache line or data in the FLC DRAM waslasted used, accessed or written by the processor. As part of the cachemechanism, recently used cache lines are maintained in the cache so thatrecently used data is readily available for the processor again whenrequested. Cache lines are least recently used, accessed or written toby the processor are overwritten to make room for more recently usedcache lines/data. In this arrangement, the cache operates in a leastrecently used, first out basis. After step 444, the operation advancesto step 424.

At decision step 424 the request from the processor is evaluated as aread request or a write request. If the request is a write request, theoperation advances to step 448 and the write request is sent with thevirtual address to the FLC DRAM controller. As shown in FIG. 2 and isunderstood in the art, DRAM devices have an associated memory controllerto oversee read/write operations to the DRAM. At a step 452, the DRAMcontroller generates DRAM row and column address bits from the virtualaddress, which are used at a step 456 to write the data from theprocessor (processor data) to the FLC DRAM. Then, at a step 460, the FLCcontroller updates the FLC status register for the cache line or data toreflect the recent use of the cache line/data just written to the FLCDRAM. Because the physical address is mapped into the FLC controllermemory mapping, that FLC controller now possess that physical address ifrequested by the processor.

Alternatively, if at decision step 424 is it determined that the requestfrom the processor is a read request, then the operation advances tostep 464 and the FLC controller sends the read request with the virtualaddress to the FLC DRAM controller for processing by the DRAMcontroller. Then at step 468, the DRAM controller generates DRAM row andcolumn address bits from the virtual address, which are used at a step472 to read (retrieve) the data from the FLC DRAM so that data can beprovided to the processor. At a step 476, the data retrieved from FLCDRAM is provide to the processor to satisfy the processor read request.Then, at a step 480, the FLC controller updates the FLC status registerfor the data (address) to reflect the recent use of the data that wasread from the FLC DRAM. Because the physical address is mapped into theFLC controller memory mapping, that FLC controller maintains thephysical address in the memory mapping as readily available if againrequested by the processor.

The above-described tasks of FIG. 4 are meant to be illustrativeexamples; the tasks may be performed sequentially, in parallel,synchronously, simultaneously, continuously, during overlapping timeperiods or in a different order depending upon the application. Also,any of the tasks may not be performed or skipped depending on theexample and/or sequence of events.

Updating of FLC Status Registers

As discussed above, status registers maintain the states of cache lineswhich are stored in the FLC module. It is contemplated that severalaspects regarding cache lines and the data stored in cache lines may betracked. One such aspect is the relative importance of the differentcache lines in relation to pre-set criteria or in relation to othercache lines. In one embodiment, the most recently accessed cache lineswould be marked or defined as most important while least recently usedcache lines are marked or defined as least important. The cache linesthat are marked as the least important, such as for example, leastrecently used, would then be eligible for being kicked out of the FLC oroverwritten to allow new cache lines to be created in FLC or new data tobe stored. The steps used for this task are understood by one ofordinary skill in the art and thus not described in detail herein.However, unlike traditional CPU cache controllers, an FLC controllerwould additionally track cache lines that had been written by CPU/GPU.This occurs so that the FLC controller does not accidentally write tothe storage drive, such as an SSD, when a cache line that had only beenused for reading is eventually purged out of FLC. In this scenario, theFLC controller marks an FLC cache line that has been written as “dirty”.

In one embodiment, certain cache lines may be designed as locked FLCcache lines. Certain cache lines in FLC could be locked to preventaccidental purging of such cache lines out of FLC. This may beparticularly important for keeping the addresses of data in the FLCcontroller when such addresses/data can not tolerate a delay forretrieval, and thus will be locked and thus maintained in FLC, even ifit was least recently used.

It is also contemplated that a time out timer for locked cache lines maybe implemented. In this configuration, a cache line may be locked, butonly for a certain period of time as tracked by a timer. The timer mayreset after a period time from lock creation or after use of the cacheline. The amount of time may vary based on the cache line, the datastored in the cache line, or the application or program assigned to thecache line.

Additionally, it is contemplated a time out bit is provided to a lockedcache line for the following purposes: to allow locked cache lines to bepurged out of FLC after a very long period of inactivity or to allowlocked cache lines to be eventually purged to the next stage or level ofFLC module and at the same time inherit the locked status bit in thenext FLC stage to minimize the time penalty for cache line/dataretrieval resulting from the previously locked cache line being purgedfrom the high speed FLC module.

FIG. 5A is a block diagram of an example embodiment of a cascaded FLCsystem. This is but one possible arrangement for a cascaded FLC system.Other embodiments are possible which do not depart from the scope of theclaims. In this embodiment, a processor 500 is provided. The processingdevice 500 may be generally similar to the processing device 72 shown inFIG. 2 . The discussion of elements in FIG. 2 is incorporated andrepeated for the elements of FIG. 5A. The processing device 500 may be acentral processing unit (CPU), graphics processing unit (GPU), or anyother type processing system including but not limited to a system onchip (SoC). The processing device 500 includes a processor 504 thatinclude various levels of processor cache 512, such as level 0, level 1,level 2, and level 3 cache. A memory management module 508 is alsoprovided to interface the processor 504 to the various levels ofprocessor cache 512 and interface the processor, such as for datarequests, to elements external to the processing device 500.

Also part of the embodiment of FIG. 5A is a storage drive 78. Thestorage drive 78 is generally similar to the storage drive 78 of FIG. 2and as such is not described in detail again. The storage drive 78 maycomprise a hard disk drive such as a traditional rotating device or asolid state drive, a combined hybrid drive. The storage drive 78includes a controller (not shown) to oversee input and output functions.A file input/output path 520 connects the processing device 500 to thestorage drive 78 through a multiplexer 554. The file I/O path 520provides a path and mechanism for the processor to directly access thestorage drive 78 for write operations, such as saving a file directly tothe storage drive as may occur in a traditional system. The multiplexer554 is a bi-directional switch which selectively passes, responsive to acontrol signal on control signal input 556, either the input from theFLC-SS 536 or the file I/O path 520.

In embodiments with an FLC as shown in FIGS. 2, 5A, 6, 8, 10, and 12 ,the storage drive has a section that is allocated, partitioned, orreserved to be an extension of main memory (extension of RAM memory).Hence, a portion of the storage drive 78 is used for traditional storageof user files such as documents, pictures, videos, music and which areviewable by the user in a traditional folder or directory structure.There is also a portion of the storage drive 78 which is allocated,partitioned, or reserved for use by the FLC systems to act as anextension of the DRAM main memory to store active programs andinstructions used by the processor, such as the operating system,drivers, application code, and active data being processed by theprocessing device. The main memory is the computer system's short-termdata storage because it stores the information the computer is activelyusing. The term main memory refers to main memory, primary memory,system memory, or RAM (random access memory). Data (operating system,drivers, application code, and active data) which is to be stored in themain memory but is least recently used, is stored in the main memorypartition of the storage drive. In the embodiments of FIGS. 2, 5A, 6, 8,10, and 12 , and also other embodiments described herein, a system busmay be located between the processing device and the FLC modules asshown in FIG. 2 .

Although the main memory partition of the storage drive 78 is slowerthan RAM for I/O operation, the hit rate for the FLC modules is so high,such as 99% or higher, that I/O to the main memory partition in thestorage drive rarely occurs and thus does not degrade performance. Thisdiscussion of the storage drive 78 and its main memory partition appliesto storage drives shown in the other figures. In all embodiments shownand described, the contents of the main memory partition of the storagedrive may be encrypted. Encryption may occur to prevent viewing ofpersonal information, Internet history, passwords, documents, emails,images that are stored in the main memory partition of storage drive 78(which is non-volatile). With encryption, should the computing deviceever be discarded, recycled, or lost, this sensitive information couldnot be read. Unlike the RAM, which does not maintain the data stored inwhen powered down, the storage drive will maintain the data even upon apower down event.

As shown in FIG. 5A are two final level cache (FLC) modules 540, 542arranged in a cascaded configuration. Each module 540, 542 is referredto as FLC stage. Although shown with two cascaded stages, a greaternumber of stages may be cascaded. Each of FLC stages (modules) 540, 542are generally similar to the FLC module 76 shown in FIG. 2 and as such,these units are not described in detail herein. In this cascadedconfiguration the FLC module 540 is a high speed (HS) module configuredto operate at higher bandwidth, lower latency, and lower power usagethan the other FLC module 542, which is a standard speed module. Thebenefits realized by the low power, high speed aspects of the FLC-HSmodule 542 are further increased due to the FLC-HS module being utilizedmore often than the FLC-SS. It is the primarily used memory and has ahit rate of greater than 99% thus providing speed and power savings onmost all main memory accesses. The FLC module 542 is referred to asstandard speed (SS) and while still fast, is optimized for lower costthan speed of operation. Because there is greater capacity of standardspeed DRAM than high speed DRAM, the cost savings are maximized, and theamount of standard speed DRAM is less, in these FLC embodiments, than isutilized in prior art computers, which often come with 8 GB or 16 GB ofRAM. An exemplary FLC system may have 4 GB of DRAM and 32 GB partitionof the storage drive. This will result in a cost saving for a typicallaptop computer, which has 8 to 16 GB of RAM, of about $200.Furthermore, because most of the memory accesses are successfullyhandled by the high speed FLC module, the standard speed FLC module ismostly inactive, and thus not consuming power. The benefits of thisconfiguration are discussed below. It is contemplated that the memorycapacity of the FLC-HS module 540 is less than the memory capacity ofthe FLC-SS module 542. In one embodiment the FLC-SS module's memoryamount is eight (8) times greater than the amount of memory in theFLC-HS module. However, some applications may even tolerate more than32× of capacity ratio.

It is noted that both the FLC-HS controller and the DRAM-HS areoptimized for low power consumption, high bandwidth, and low latency(high speed). Thus, both elements provide the benefits described above.On the other hand, both the FLC-SS controller and the DRAM-SS areoptimized for lower cost. In one configuration, the look-up tables ofthe FLC-HS controller are located in the FLC-HS controller and utilizedSRAM or other high speed/lower power memory. However, for the FLC-SS,the look-up tables may be stored in the DRAM-SS. While having thisconfiguration is slower than having the look-up tables stored in theFLC-SS controller, it is more cost effective to partition a smallportion of the DRAM-SS for the look-up tables needed for the FLC-SS. Inone embodiment, to reduce the time penalty of accessing the lookup tablestored in the DRAM-SS a small SRAM cache of the DRAM-SS lookup table maybe included to cache the most recently seen (used) address translations.Such an address cache does not have to be fully associative as only theaddress translation tables are being cached. A set associative cachesuch as that used in a CPU L2 and L3 cache is sufficient as even 5%misses already reduce the need of doing the address translation in theDRAM by a factor of 20×. This may be achieved with only a smallpercentage, such as 1000 out of 64,000, look-up table entries cached.The address cache may also be based on least recently used/first outoperation.

In this embodiment the FLC module 540 includes an FLC-HS controller 532and a DRAM-HS memory 528 with associated memory controller 544. The FLCmodule 542 includes an FLC-SS controller 536 and a DRAM-SS memory 524with associated memory controller 548. The FCL-HS controller 532connects to the processing device 500. The also connects to the DRAM-HS528 and also to the FLC-SS controller 536 as shown. The outputs of theFLC-SS controller 536 connect to the DRAM-SS 524 and also to the storagedrive 78.

The controllers 544, 548 of each DRAM 528, 524 operate as understood inthe art to guide and control, read and write operation to the DRAM, andas such these elements and related operation are not described indetail. Although shown as DRAM it is contemplated that any type RAM maybe utilized. The connection between controllers 544, 548 and the DRAM528, 524 enable communication between these elements and allow for datato retrieved from and stored to the respective DRAM.

In this example embodiment, the FLC controllers 532, 536 include one ormore look-up tables storing physical memory addresses which are may betranslated to addresses which correspond to locations in the DRAM 528,524. For example, the physical address may be converted to a virtualaddress and the DRAM controller may use the virtual address to generateDRAM row and column address bits. The DRAM 528, 524 function as cachememory. In this embodiment the look-up tables are full-associative thushaving a one to one mapping and permits data to be stored in any cacheblock which leads to no conflicts between two or more memory addressmapping to a single cache block.

As shown in FIG. 5A, the standard speed FLC module 542 does not directlyconnect to the processing device 500. By having only the high speed FLCmodule 540 connect to the processing device 500, the standard speed FLCmodule 542 is private to the high speed FLC module 540. It iscontemplated that the one high speed FLC module could share one or morestandard speed FLC modules. This arrangement does not slow down theprocessor by having to re-route misses in the FLC-HS controller 532 backthrough the processing device 500, to be routed to the standard speedFLC module 542 which would inevitably consume valuable system busresources and create additional overhead for the processing device 500.

In general, during operation of a memory read event, a data request witha physical address for the requested data is sent from the processingdevice 500 to the FLC-HS controller 532. The FLC-HS controller 532stores one or more tables of memory addresses accessible by the FLC-HScontroller 532 in the associated DRAM-HS 528. The FLC-HS controller 532determines if its memory tables contain a corresponding physicaladdress. If the FLC-HS controller 532 contains a corresponding memoryaddress in its table, then a hit has occurred that the FLC-HS controller532 retrieves the data from the DRAM-HS 528 (via the controller 544),which is in turn provided back to the processing device 500 through theFLC-HS controller.

Alternatively, if the FLC-HS controller 532 does not contain a matchingphysical address the outcome is a miss, and the request is forwarded tothe FLC-SS controller 536. This process repeats at the FLC-SS controller536 such that if a matching physical address is located in the memoryaddress look-up table of the FLC-SS controller 536, then the requestedis translated or converted into a virtual memory address and the datapulled from the DRAM-SS 524 via the memory controller 548. The DRAMcontroller generates DRAM row and column address bits from the virtualaddress. In the event that a matching physical address is located in thememory address look-up table of the FLC-SS controller 536, then the datarequest and physical address is directed by the FLC-SS controller 536 tothe storage drive.

If the requested data is not available in the DRAM-HS 528, but is storedand retrieved from the DRAM-SS, then the retrieved data is backfilled inthe DRAM-HS when provided to the processor by being transferred to theFLC-SS controller 536 and then to the FLC-HS controller, and then to theprocessor 500. When backfilling the data, if space is not available in aDRAM-SS or DRAM-HS, then the least most recently used data or cache linewill be removed or the data therein overwritten. In one embodiment, dataremoved from the high speed cache remains in the standard speed cacheuntil additional space is needed in the standard speed cache. It isfurther contemplated that in some instances data may be stored in onlythe high speed FLC module and the not standard speed FLC module, or viceversa.

If the requested data is not available in the DRAM-HS 528 and also notavailable in the DRAM-SS 524 and is thus retrieved from the storagedrive 78, then the retrieved data is backfilled in the DRAM-HS, theDRAM-SS, or both when provided to the processor. Thus, the most recentlyused data is stored in the DRAMs 528, 524 and overtime, the DRAM contentis dynamically updated with the most recently used data. Least oftenused data is discarded from or overwritten in the DRAM 528, 524 to makeroom more recently used data. These back-fill paths are shown in FIG. 5Aas the ‘first stage cache replacement path’ and the ‘second stage cachereplacement path’.

FIG. 5B is a block diagram of an example embodiment of an FLCcontroller. This is but one configuration of the base elements of an FLCcontroller. One of ordinary skill in the art will understand thatadditional elements, data paths, and support elements are present in aworking system of all embodiments disclosed herein. These elements, datapaths, and support elements are not shown, instead the focus being onthe elements which support the disclosed innovations. The FLC controller532 in FIG. 5B is representative of FLC controller 532 of FIG. 5A orother FLC controllers disclosed herein.

In FIG. 5B, an input/output path 564 to the processor (500, FIG. 5A) isshown. The processor I/O path 564 connects to a FLC logic unit statemachine (state machine) 560. The state machine 500 may comprise anydevice capable of performing as described herein such as, but notlimited to, and ASIC, control logic, state machine, processor, or anycombination of these elements or any other element. The state machine560 translates the system physical address to FLC virtual address. Thisstate machine performs a fully associative lookup process using multiplestages of hashing functions. Alternatively, the state machine 560 couldbe or use a content addressable memory (CAM) to perform this translationbut that would be expensive.

The state machine 560 connects to memory 576, such as for example, SRAM.The memory 576 stores look-up tables which contain physical addressesstored in the FLC controller. These physical addresses can be translatedor mapped to virtual addresses which identify cache lines accessible byFLC controller 532. The memory 576 may store address maps and multiplehash tables. Using multiple hash tables reduce power consumption andreduce operational delay.

The state machine 560 and the memory 576 operate together to translate aphysical address from the processing device to a virtual address. Thevirtual address is provided to the DRAM over a hit I/O line 568 when a‘hit’ occurs. If the state machine 560 determines that its memory 576does not contain the physical address entry, then a miss has occurred.If a miss occurs, then the FLC logic unit state machines provides therequest with the physical address a miss I/O line 572 which leads to thestorage drive or to another FLC controller.

FIG. 6 is a block diagram of parallel cascaded FLC modules. As comparedto FIG. 5A, identical elements are labeled with identical referencenumbers and are not described again. Added to this embodiment are one ormore additional FLC module 550, 552. In this example embodiment, highspeed FLC module 550 is generally identical to high speed FLC module 540and standard speed FLC module 552 is generally identical to standardspeed FLC module 542. As shown, the high speed FLC module 550 connectsto the processing device 500 while the standard speed FLC module 552connects to the storage drive 78 through the multiplexer 554. Both ofthe high speed FLC modules 540, 550 connect to the processing device500, such as through a system bus.

Operation of the embodiment of FIG. 6 is generally similar to theoperation of the embodiment of FIG. 5A and FIG. 8 . FIG. 7 provides anoperational flow diagram of the embodiment of FIG. 5A. The configurationshown in FIG. 6 has numerous benefits over a single cascaded embodimentof FIG. 5A. Although more costly and consuming more space, havingmultiple parallel arranged cascaded FLC modules provide the benefit ofsegregating the memory addresses to different and dedicated FLC modulesand allowing for parallel memory operations with the two or more FLCmodules, while still having the benefits of multiple stages of FLC asdiscussed above in connection with FIG. 5A.

FIG. 7 is an operation flow diagram of an example method of operation ofthe cascaded FLC modules as shown in FIG. 5A. This is but one examplemethod of operation and other methods of operation are contemplated aswould be understood by one of ordinary skill in the art. At a step 704,a read request with a physical address for data is sent from theprocessing device (processor) to the FLC-HS module, and in particular tothe FLC-HS controller. Then at a decision step 708, the FLC-HScontroller determines if the physical address is identified in thelook-up table of the FLC-HS controller. The outcome of decision step 708may be a hit or a miss.

If the physical address is located at step 708, then the outcome is ahit and the operation advances to a step 712. At step 712, the readrequest is sent with the virtual address to the DRAM-HS controller. Asshown in FIG. 2 and is understood in the art, DRAM devices have anassociated memory controller to oversee read/write operations to theDRAM. At a step 716, the DRAM controller generates DRAM row and columnaddress bits from the virtual address, which are used at a step 720 toread (retrieve) the data or cache line from the DRAM-HS. At a step 724the FLC-HS controller provides the data to the processor to satisfy therequest. Then, at a step 728, the FLC-HS controller updates the FLCstatus register for the cache line (address or data) to reflect therecent use of the cache line. In one embodiment, the data is written tothe DRAM-HS and also written to the FLC-SS module.

Alternatively, if at step 708 the physical address is not identified inthe FLC-HS, then the operation advances to step 732 and a new (empty)cache line is allocated in the FLC-HS controller, such as the memorylook-up table and the DRAM-HS. Because the physical address was notidentified in the FLC-HS module, space must be created for a cache line.Then, at a step 736, the FLC-HS controller forwards the data request andthe physical address to the FLC-SS module.

As occurs in the FLC-HS module, at a decision step 740 a determinationis made whether the physical address is identified in the FLC-SS. If thephysical address is in the FLC-SS module, as revealed by the physicaladdress being present in a look-up table of the FLC-SS controller, thenthe operation advances to a step 744. At step 744, the read request issent with the virtual address to the DRAM-SS controller. At a step 748,the DRAM-SS controller generates DRAM row and column address bits fromthe virtual address, which are used at a step 752 to read (retrieve) thedata from the DRAM-SS. The virtual address of the FLC-HS is differentthan the virtual address of the FLC-SS so a different conversion of thephysical address to virtual address occurs in each FLC controller.

At a step 724 the FLC-HS controller forwards the requested cache line tothe FLC-HS controller, which in turn provides the cache lines (withdata) to the DRAM-HS so that it is cached in the FLC-HS module.Eventually, the data is provided from the FLC-HS to the processor. Then,at a step 760, the FLC-HS controller updates the FLC status register forthe data (address) to reflect the recent use of the data provided to theFLC-HS and then to the processor.

If at step 740 the physical address is not identified in the FLC-SS,then a miss has occurred in the FLC-SS controller and the operationadvances to a step 764 and new (empty) cache line is allocated in theFLC-SS controller. Because the physical address was not identified inthe FLC-SS controller, then space must be created for a cache line. At astep 768 the FLC-SS controller translates the physical address to astorage drive address, such as for example a PCI-e type address. Thestorage drive address is an address understood by or used by the storagedrive to identify the location of the cache line. Next, at a step 772,the storage drive address, resulting from the translation, is forwardedto the storage drive, for example, PCI-e, NVMe, or SATA SSD. At a step776, using the storage drive address, the storage drive controllerretrieves the data and the retrieved data is provided to the FLC-SScontroller. At a step 780, the FLC-SS controller writes the data to theFLC-SS DRAM and updates the FLC-SS status register. As discussed above,updating the status register occurs to designate the cache line asrecently used, thereby preventing it from being overwritten until itbecomes a least recently used. Although tracking of least recently usedstatus is tracked on a cache line basis, it is contemplated that leastrecently used status could be tracked for individual data items withincache lines, but this would add complexity and additional overheadburden.

In one embodiment, a cache line is retrieved from the storage drive asshown at step 764 and 752. The entire cache line is provided to theFLC-HS controller. The FLC-HS controller stores the entire cache line inthe DRAM-HS. The data requested by the processor is stored in this cacheline. To satisfy the processors request, the FLC-HS controller extractsthe data from the cache line and provides the data to the processor.This may occur before or after the cache line is written to the DRAM-HS.In one configuration, the only the cache line is provided from theFLC-SS controller to the FLC-HS controller, and then the FLC-HScontroller extracts the data requested by the processor from the cacheline. In another embodiment, the FLC-SS controller provides first therequested data and then the cache line to the FLC-HS controller. TheFLC-HS controller can then provide the data processor and then orconcurrently write the cache line to the FLC-HS. This may be faster asthe extracted data is provided to the FLC-HS controller first.

As mentioned above, the virtual addresses of the FLC-HS controller arenot the same as the virtual addresses of the FLC-SS controller. Thelook-up tables, in each FLC controller are distinct and have norelationship between them. As a result, each FLC controllers virtualaddress set is also unique. It is possible that virtual address could,by chance, have the same bits between them but the virtual addresses aredifferent as they are meant to be used in their respective DRAM (DRAM-HSand DRAM-SS).

FIG. 8 is a block diagram of a split FLC module system having two ormore separate FLC modules. This is but one possible embodiment of asplit FLC module system and it is contemplated that differentarrangements are possible without departing from the scope of theclaims. As compared to FIG. 5A, identical elements are labeled withidentical reference numbers and these duplicate elements are notdescribed again in detail.

As shown in FIG. 8 , a first(a), second(b) up to n number of stages ofFLC modules 802 are provided in a parallel to enable parallel processingof memory requests. The value of n may be any whole number. In referenceto the first FLC module 820A, a FLCa controller 804A connects to orcommunicates with the processing unit 500 to receive read or writerequests. A system bus (not shown) may reside between the FLC modules820 and the processing device 500 such that communications and requestrouting may occur through a system bus. The FLCa controller 804A alsoconnects to a DRAM memory controller 808A associated with a DRAMa 812A.The FLCa controller 804A also directly connects to or communicates withthe storage drive 78. Each of the other FLC modules 820B, 820 n aresimilarly configured with each element sharing the same referencenumbers but with different identifier letters. For example, the FLCmodule 820B includes FLCb controller 804B, DRAM memory controller 808B,and DRAMb 812B. FLC module 820B also connects to or communicates withthe processing device 500 and the storage drive 78 as shown. Althoughshown with a single processing device 500, it is contemplate thatadditional processing devices (GPU/audio processing unit/ . . . ) mayalso utilized the FLC modules 820

One or more of the FLC modules 820 may be configured as high speed FLCmodules, which have high speed/low latency/low power DRAM or the FLCmodules may be standard speed modules with standard speed DRAM. Thisallows for different operational speed for different FLC modules. Thisin turn accommodates the processing modules 500 directing important dataread/write requests to the high-speed FLC module while less importantread/write requests are routed to the standard speed FLC modules.

In one embodiment, each FLC slice (FLCa, FLCb, FLCc) connects to a SoCbus and each FLC slice is assigned an address by the processing device.Each FLC slice is a distinct element aid separate and distinct memoryloo-up tables. A bus address look-up table or hash table may be used tomap memory addresses to FLC slices. In one configuration, certain bitsin the physical address define which FLC slice is assigned to theaddress. In another embodiment, a bi-directional multiplexer (not shown)may be provided between the FLC slices and the processing unit 500 tocontrol access to each FLC slice, but this arrangement may create abottleneck which slows operation.

It is also contemplated that the embodiments of FIG. 5A and FIGS. 8 maybe combined such that a system may be assembled which has one or moreFLC modules 820A with a single FLC controller 804A and also one or morecascaded FLC modules as shown in FIG. 5A. The benefit of combining thesetwo different arrangements is that the benefits of both arrangements areachieved. There are multiple paths from the processor to access DRAMthereby increasing system speed and bandwidth while also providing thebenefits of a high speed, two stage, FLC controller to increase speed,bandwidth and lower power consumption. Combined systems may be arrangedin any manner to tailor the system to meet design needs.

FIG. 9 is an operation flow diagram of an example method of operation ofthe split FLC modules as shown in FIG. 8 . This is but one examplemethod of operation and other methods of operation are contemplated aswould be understood by one of ordinary skill in the art. Prior toinitiation of the method a memory look-up table is provided as part ofthe processing device or the system bus. The look-up table is configuredto store associations between the addresses from the processor and theFLC modules. Each FLC module may be referred to in this embodiment as aslice, and each FLC slice may have multiple FLC stages.

In this embodiment, multiple FLC slices are established to increase FLCcapacity and bandwidth. Each FLC slices are allocated to a portion ofthe system bus memory address space (regions). Moreover, these memoryregions are interleaved among the FLC slices. The interleavinggranularity is set to match the FLC cache line sizes to prevent unwantedduplications (through overlapping) of FLC look up table entries in thedifferent FLC controller slices and ultimately to maximize the FLC hitrates.

One example embodiment, the mapping assigns, in interleaved order,address blocks of FLC cache line size, to the FLC modules. For example,for an FLC implementation with cache line sizes of 4KB and for animplementation of four different FLCs (FLCa, FLCb, FLCc, FLCd) thefollowing mapping (assignment) of memory identified, by the physicaladdresses, to the FLCs is as follows:

-   1st 4KB—FLCa-   2nd 4KB—FLCb-   3rd 4KB—FLCc-   4th 4KB—FLCd-   5th 4KB—FLCa-   6th 4KB—FLCb-   7th 4KB—FLCc-   8th 4KB—FLCd-   9th 4KB—FLCa.-   This memory mapping assignment scheme continues following this    pattern. This may be referred to as memory mapping with cache line    boundaries to segregate the data to different FLC modules. In this    matter, the memory addresses used by the processing device are    divided among the FLC slices thereby creating a parallel arranged    FLC system that allows for increased performance without any    bottlenecks. This allows multiple different programs to utilize only    one FLC module, or spread their memory usage among all the FLC    modules which increases operational speed and reduces bottlenecks.

In one embodiment, each FLC slice corresponds to a memory address. Inthis example method of operation, there are four FLC slices, defined asFLCa, FLCb, FLCc, and FLCd. Each FLC slice has a unique code thatidentifies the FLC slice. For example, exemplary memory addresses areprovided below with FLC slice assignments:

-   addresses xxxx-00-xxxxx is assigned to FLCa,-   addresses xxxx-01-xxxxx is assigned to FLCb-   addresses xxxx-10-xxxxx is assigned to FLCc-   addresses xxxx-11-xxxxx is assigned to FLCd where the x's are any    combinations of “0” and “1”. In other embodiment, other addressing    mapping schemes may be utilized.

Any other address block mapping schemes with integer number of FLC cacheline size could be used. With partial or non-integer block sizes therecould be duplicates of look up table entries in the different FLCslices. While this may not be fatal it would nonetheless result in asmaller number of distinct address look up table entries and ultimatelyimpact FLC cache hit performance.

Returning to FIG. 9 , at a step 912 the memory addresses are assigned toeach FLC module (in this embodiment FLC1, FLC2, FLC3 but otherembodiments may have a greater or fewer number of FLC modules. Theassignment may be made as described above in interleaved manner. Then,at a step 916 the processing device generates a read request for datastored in the memory. In other embodiments, the request could be a writerequest. At a step 920, the data request from the processing device isanalyzed and based on the memory mapping, the data request (withphysical address) is routed to the proper FLC. This may occur in thesystem bus. Based on the above provided exemplary memory addressassociation, if the physical memory is xxxx-00-xxxxx, this address mapsto FLCa, and the address is routed to a processor bus port assigned toFLCa. Then the operation advances to step 924 where the method of FIG. 4occurs for the data request and physical address. If the memory addressis xxxx-01-xxxxx, this address will map to FLCb and the operationadvances to step 928. If the physical memory address is xxxx-10-xxxxx,it maps to FLCc, and the operation advances to step 932 where the methodof FIG. 4 occurs for the data request and physical address. If thephysical memory address is xxxx-11-xxxxx, this address maps to FLCd, andthe operation advances to step 936 where the method of FIG. 4 occurs forthe data request and physical address. The method of FIG. 4 and it'sdiscussion is incorporated into this discussion of FIG. 9 .

FIG. 10 is an exemplary block diagram of an example embodiment of acascaded FLC system with a bypass path. As compared to FIG. 5A,identical elements are labeled with identical reference numbers. In thisembodiment a bypass module 1004 is provided between and connects to thehigh speed FLC module 540 and the processing device 500. An input to thebypass module 1004 receives a request from the processing device 500.The bypass module 1004 may be any type device capable of analyzing therequest form the processor and classifying it as a request to be routedto the bypass path or routed to the high speed FLC module 540. Thebypass module 1004 may comprise, but it not limited to, a state machine,a processor, control logic, ASIC, any other similar or equivalentdevice.

A first output from the bypass module 1004 connects to the FLC-HScontroller 532. A second outputs from the bypass module 1004 connects toa multiplexer 1008. The multiplexer 1008 also receives a control signalon a control input 1012. The multiplexer 1008 may be any type switchconfigured to, responsive to the control signal, output one of the inputsignals at a particular time. The output of the multiplexer 1008connects to the standard speed FLC controller 536 of the standard speedFLC module 542.

Operation of the bypass module 1004 and multiplexer 1008, in connectionwith the cascaded FLC modules as shown in FIG. 10 , is discussed belowin FIG. 11 . In general, the bypass module 1004 analyzes the requestsfrom the processing device 500 and determines whether the requestqualifies as a request which should be bypassed to the standard speedFLC module 542 or directed to the high speed FLC module 540. If therequest is determined to be a bypass type request, the request isre-directed by the bypass module 1004 to the multiplexer 1008, where itis selectively switched to the standard speed FLC module 536.

FIG. 11 is an operation flow diagram of an example method of operationof the split FLC modules as shown in FIG. 8 . This is but one examplemethod of operation and other methods of operation are contemplated aswould be understood by one of ordinary skill in the art. This methodstarts at step 1108 with the processing device generating a read requestfor data from memory. This step occurs in the traditional matter as istypical of processors requesting data from main memory, such as RAM. Ata step 1112, the request from the processing device is provided to thebypass module for processing. The bypass module processes the request todetermine if the request qualifies as or is classified as data that willbypass the high speed FLC module. Data or certain addresses may beclassified to bypass the high speed FLC module for a number of differentreasons.

In some embodiments, bypass data is data that is not used often enoughto qualify, from a performance standpoint, for storage in the high speedDRAM. In other embodiments, certain physical addresses from theprocessing devices are designated as bypass addresses which the bypassmodule routes to the bypass path. This is referred to as fixed addressmapping whereby certain addresses or blocks of addresses are directed tothe bypass path. Similarly, the bypass decision could be based on datatype as designated by the processor or other software/hardware function.

The bypass designation could also be based on a task ID, which isdefined as the importance of a task. The task ID, defining the taskimportance, may be set by a fixed set of criteria or vary over timebased on the available capacity of the DRAM-HS or other factors. Asoftware engine or algorithm could also designate task ID. The bypassmodule may also be configured to reserve space in the DRAM-HS such thatonly certain task ID's can be placed in the reserved DRAM-HS memoryspace. To avoid never ending or needless blocking of caching to theDRAM-HS based on bypass module control, the task IDs or designation maytime out, meaning the bypass designation is terminated after a fixed orprogrammable timer period. Task ID's could furthermore be used to defineDRAM-HS cache line allocation capacity on per Task ID's basis. This isto prevent greedy tasks/threads from purging non-greedy tasks/threadsand ultimately to enable a more balanced overall system performance.Operating Systems could also change the cache line allocation capacitytable over time to reflect the number of concurrent tasks/threads thatneeds to simultaneously operate during a given period of time.

By way of example, a screen display showing active video play (movie)has a constantly changing screen display, but when not playing video,the screen display is static. As a result, the bypass module may beconfigured to bypass the active video display to the bypass path due tothe video not being re-display more than once or twice to the screen.However, for a paused movie or during non-video play when the screen isstatic, the display data may be cached (not bypassed) since it isre-used over and over when refreshing the screen. Thus, it is best tohave the data forming the static display in the FLC-HS module becauseFLC-HS module has lower power consumption. This can be done in softwareor hardware to detect if the screen is a repeating screen display.

In one embodiment, the bypass module includes algorithms and machinelearning engines that monitor, over time, which data (rarely used orused only once) should be bypassed away from the high speed FLC moduletoward the standard speed FLC module. Over time the machine learningcapability with artificial intelligence of the bypass module determineswhich data, for a particular user, is rarely used, or used only once,and thus should be bypassed away from the high speed FLC module. If theuser, over time, uses that data more often, then the machine learningaspects of the bypass module will adjust and adapt to the change inbehavior to direct that data to the high speed FLC module to be cachedto maximize performance.

In one embodiment, the bypass module does not use machine learning oradapt to the user's behavior, instead the data or address which arebypassed to other than the high speed FLC module are fixed, userprogramable, or software controlled. This is a less complicatedapproach.

It is also contemplated that the processing device may designate data tobe bypass type data. As such, the request (read or write) from theprocessing device to the bypass module would include a designation asbypass type data. This provides a further mechanism to control whichdata is stored in the high speed FLC module, which has the flexibilityof software control.

It is also contemplated and disclosed that the bypass designate for datamay have a timer function which removes the bypass designation after aperiod of time, or after a period of time, the bypass designation mustbe renewed to remain active. This prevents the bypass designation frombeing applied to data that should no longer have the bypass designation.

Returning to FIG. 11 , at decision step 1116, a determination is madewhether the data is bypass data. If the data is not designated by thebypass module as data which should not by bypassed, then the operationadvances to a step 1120. At step 1120 the operation executed the methodFIG. 7 , described above. Having been described above, the method stepsof FIG. 7 are not repeated, but instead incorporated into this sectionof the application. As explained in FIG. 7 , the method at this pointprogresses as if a cascaded FLC system.

Alternatively, if at decision step 1116 the bypass module determinesthat the data should be bypassed, then the operation advances to step1124 and the data request with physical address is routed from thebypass module to the bypass multiplexer. In other embodiments, the datarequest and physical address may be routed to a bypass multiplexer. Thebypass multiplexer (as well as other multiplexers disclosed herein) is aby-direction multiplexer that, responsive to a control signal, passesone of its inputs to its output, which in this embodiment connects tothe standard speed FLC module. The other input to the bypass multiplexeris from the high speed FLC controller as shown in FIG. 10 .

At a step 1128, responsive to the control signal to the bypassmultiplexer, the bypass multiplexer routes the data request and physicaladdress to the standard speed FLC-SS module. In other embodiments, thedata request and physical address from the bypass multiplexer may betransferred to a different location, such as a different high speed FLCmodule or directly to the storage drive. Then, at a step 1132, the datarequest and physical address is processed by the standard speed FLC-SSmodule in the manner described in FIG. 4 . Because this data is definedas bypass data, it is not cached in the DRAM-HS or the FLC-HScontroller. The method of FIG. 4 is incorporated into this section ofFIG. 11 .

FIG. 12 is an exemplary block diagram of an example embodiment of acascaded FLC system with a bypass path and non-cacheable data path. Ascompared to FIG. 5A and 10 , identical elements are labeled withidentical reference numbers. This example embodiment is but one possibleconfiguration for a system that separately routes non-cacheable dataand, as such, one of ordinary skill in art may arrive at otherembodiments and arrangements. Added to this embodiment, beyond theconfiguration of FIG. 10 , is a non-cacheable data path 1204 thatconnects between the bypass module 1004 and a second multiplexer 1208.The second multiplexer 1208 include a control signal input 1212configured to provide a control signal to the multiplexer. The controlsignal 1212 for the second multiplexer 1208 determines which of the twoinputs to the second multiplexer is outputs to the DRAM-SS 524.

In this embodiment, a portion of the DRAM-SS 524 is partitioned to bereserved as non-cacheable memory. In the non-cacheable data partition ofthe DRAM-SS, non-cacheable data is stored. As such, the non-cacheabledata partition operates as traditional processor/DRAM. If the processorrequests non-cacheable data, such as a video file which is typicallyviewed once, then the file is retrieved by the processor over the fileI/O path 520 from the storage drive 78 and provided to the non-cacheablepartition of the DRAM-SS. This data now stored in the DRAM-SS may thenbe retrieved by the processor in smaller blocks, over the non-cacheabledata path. A video file, such as a movie, is typically very large and istypically only watched once, and thus not cached because there would beno performance benefit to caching data used only once. Partitioning aportion of a memory is understood by one of ordinary skill in the artand as such, this process is not described in detail herein. Thenon-cacheable data could also be stored in the storage drive 78.

In this embodiment the bypass module 1004 is further configured toanalyze the read request and determine if the read request is for dataclassified as non-cacheable data. If so, then the data read request fromthe processing device 500 is routed to the second multiplexer 1208through non-cacheable data path 1204. The second multiplexer 1208,responsive to the control signal, determines whether to pass, to theDRAM-SS 524 either the non-cacheable data read request or the requestfrom the standard speed FLC-SS controller 536. Because the data isnon-cacheable, after the data is provided to the processor, the data isnot cached in either the DRAM-HS 528 or the DRAM-SS 524, but could bestored in the non-cacheable data partition of the DRAM-SS.

FIG. 13 provides operational flow chart of an exemplary method ofoperation for the embodiment of FIG. 12 . This is but one example methodof operation and other methods of operation are contemplated as would beunderstood by one of ordinary skill in the art. The method of operationis similar to the method of FIG. 11 with the additional steps directedto processing non-cacheable data. At a step 1304, the processing devicegenerates a read request for data stored in memory. The request includesa physical address. Then at a step 1308 the request and physical addressare provided to the bypass module to determine if the request should berouted to the bypass path or if the request is a request fornon-cacheable data and thus should be routed to a non-cacheable datapath. At a decision step 1312, a determination is made whether the datarequest should be routed to the bypass path. If the determination ismade that the request is a bypass data type request, then the operationadvances to step 1316 and the bypass module routes the data request andphysical address from the bypass module to the bypass multiplexer. Thebypass multiplexer may be any device capable of receiving two or moreinputs and selectively routing one of the inputs to an output. Thebypass multiplexer is bi-directional so a signal at the multiplexerssingle output may be routed to either input path. A bypass multiplexercontrol signal on input 1012 controls operation of the bypassmultiplexer.

Thereafter, at a step 1320, responsive to a control signal provided tothe bypass multiplexer, the data request with physical address is routedfrom the bypass multiplexer to the FLC-SS module. Then at step 1324 theFLC-SS module processes the data request and physical address asdescribed in FIG. 4 . The method of FIG. 4 is incorporated into FIG. 13.

Alternatively, if at decision step 1312 it is determined that the bypasscriteria was not satisfied, then the operation advances to decision step1328 where it is determined if the requested is a cacheable memoryrequest. A cacheable memory request is a request from the processingdevice for data that will be cached in one of the FLC modules while anon-cacheable memory request is for data that will not be cached. If therequest is for cacheable memory, then the operation advances to step1332 and the process of FIG. 7 is executed based on the data request andphysical address. The method of FIG. 7 is incorporated into FIG. 13 .

Alternatively, if at step 1328 the requested data is determined to benon-cacheable, then the operation advances to step 1336. At step 1336the non-cacheable data request including the physical address is routedfrom the bypass module to a second multiplexer. The second multiplexermay be configured and operate generally similar to the bypassmultiplexer. At a step 1340, responsive to a second multiplexer controlsignal, the data request and physical address from the secondmultiplexer is provided to the DRAM-SS controller which directs therequest to a partition of the DRAM-SS reserved for non-cacheable data.At a step 1344 the FLC-SS controller retrieves the non-cacheable datafrom the DRAM-SS non-cacheable data partition and at step 1348 theFLC-SS controller provides the non-cacheable data to the processingdevice. The retrieved data is not cached in the DRAM-HS cache or theDRAM-SS cache, but may be maintained in the non-cacheable partition ofthe DRAM-SS. As such, it is not assessable through the FLC-SS module butis instead accessed through the non-cacheable data path.

It is contemplated and disclosed that any of the embodiments, elementsor variations described above may be assembled or arranged in anycombination to form new embodiments. For example, as shown in FIG. 6 ,the parallel FLC module arrangements (FLC slices) may be combined withtwo or more stages of FLC modules. Any of these embodiments may beassembled or claimed with the bypass module features and/or thenon-cacheable data path. It is also contemplated that the more than twostages of FLC modules (such as three or four FLC module stages) may becombined with any other elements shown or described herein.

It is also understood that although the flow charts and methods ofoperation are shown and discussed in relation to sequential operation,it is understood and disclosed that various operation may be occurringin parallel. This increases the speed of operation, bandwidth, andreduces latency in the system.

The wireless communication aspects described in the present disclosurecan be conducted in full or partial compliance with IEEE standard802.11-2012, IEEE standard 802.16-2009, IEEE standard 802.20-2008,and/or Bluetooth Core Specification v4.0. In various implementations,Bluetooth Core Specification v4.0 may be modified by one or more ofBluetooth Core Specification Addendums 2, 3, or 4. In variousimplementations, IEEE 802.11-2012 may be supplemented by draft IEEEstandard 802.11ac, draft IEEE standard 802.11ad, and/or draft IEEEstandard 802.11ah.

Although the terms first, second, third, etc. may be used herein todescribe various chips, modules, signals, elements, and/or components,these items should not be limited by these terms. These terms may beonly used to distinguish one item from another item. Terms such as“first,” “second,” and other numerical terms when used herein do notimply a sequence or order unless clearly indicated by the context. Thus,a first item discussed below could be termed a second item withoutdeparting from the teachings of the example examples.

Also, various terms are used to describe the physical relationshipbetween components. When a first element is referred to as being“connected to”, “engaged to”, or “coupled to” a second element, thefirst element may be directly connected, engaged, disposed, applied, orcoupled to the second element, or intervening elements may be present.In contrast, when an element is referred to as being “directly connectedto”, “directly engaged to”, or “directly coupled to” another element,there may be no intervening elements present. Stating that a firstelement is “connected to”, “engaged to”, or “coupled to” a secondelement implies that the first element may be “directly connected to”,“directly engaged to”, or “directly coupled to” the second element.Other words used to describe the relationship between elements should beinterpreted in a like fashion (e.g., “between” versus “directlybetween”, “adjacent” versus “directly adjacent”, etc.).

The foregoing description is merely illustrative in nature and is in noway intended to limit the disclosure, its application, or uses. Thebroad teachings of the disclosure can be implemented in a variety offorms. Therefore, while this disclosure includes particular examples,the true scope of the disclosure should not be so limited since othermodifications will become apparent upon a study of the drawings, thespecification, and the following claims. As used herein, the phrase atleast one of A, B, and C should be construed to mean a logical (A OR BOR C), using a non-exclusive logical OR, and should not be construed tomean “at least one of A, at least one of B, and at least one of C.” Itshould be understood that one or more steps within a method may beexecuted in different order (or concurrently) without altering theprinciples of the present disclosure.

In this application, including the definitions below, the term ‘module’or the term ‘controller’ may be replaced with the term ‘circuit.’ Theterm ‘module’ and the term ‘controller’ may refer to, be part of, orinclude: an Application Specific Integrated Circuit (ASIC); a digital,analog, or mixed analog/digital discrete circuit; a digital, analog, ormixed analog/digital integrated circuit; a combinational logic circuit;a field programmable gate array (FPGA); a processor circuit (shared,dedicated, or group) that executes code; a memory circuit (shared,dedicated, or group) that stores code executed by the processor circuit;other suitable hardware components that provide the describedfunctionality; or a combination of some or all of the above, such as ina system-on-chip.

A module or a controller may include one or more interface circuits. Insome examples, the interface circuits may include wired or wirelessinterfaces that are connected to a local area network (LAN), theInternet, a wide area network (WAN), or combinations thereof. Thefunctionality of any given module or controller of the presentdisclosure may be distributed among multiple modules and/or controllersthat are connected via interface circuits. For example, multiple modulesand/or controllers may allow load balancing. In a further example, aserver (also known as remote, or cloud) module or (remote, or cloud)controller may accomplish some functionality on behalf of a clientmodule and/or a client controller.

The term code, as used above, may include software, firmware, and/ormicrocode, and may refer to programs, routines, functions, classes, datastructures, and/or objects. The term shared processor circuitencompasses a single processor circuit that executes some or all codefrom multiple modules and/or controllers. The term group processorcircuit encompasses a processor circuit that, in combination withadditional processor circuits, executes some or all code from one ormore modules and/or controllers. References to multiple processorcircuits encompass multiple processor circuits on discrete dies,multiple processor circuits on a single die, multiple cores of a singleprocessor circuit, multiple threads of a single processor circuit, or acombination of the above. The term shared memory circuit encompasses asingle memory circuit that stores some or all code from multiple modulesand/or controllers. The term group memory circuit encompasses a memorycircuit that, in combination with additional memories, stores some orall code from one or more modules and/or controllers.

The term memory circuit is a subset of the term computer-readablemedium. The term computer-readable medium, as used herein, does notencompass transitory electrical or electromagnetic signals propagatingthrough a medium (such as on a carrier wave); the term computer-readablemedium may therefore be considered tangible and non-transitory.Non-limiting examples of a non-transitory, tangible computer-readablemedium are non-volatile memory circuits (such as a flash memory circuit,an erasable programmable read-only memory circuit, or a mask read-onlymemory circuit), volatile memory circuits (such as a static randomaccess memory circuit or a dynamic random access memory circuit),magnetic storage media (such as an analog or digital magnetic tape or ahard disk drive), and optical storage media (such as a CD, a DVD, or aBlu-ray Disc).

The apparatuses and methods described in this application may bepartially or fully implemented by a special purpose computer created byconfiguring a general purpose computer to execute one or more particularfunctions embodied in computer programs. The functional blocks andflowchart elements described above serve as software specifications,which can be translated into the computer programs by the routine workof a skilled technician or programmer.

The computer programs include processor-executable instructions that arestored on at least one non-transitory, tangible computer-readablemedium. The computer programs may also include or rely on stored data.The computer programs may encompass a basic input/output system (BIOS)that interacts with hardware of the special purpose computer, devicedrivers that interact with particular devices of the special purposecomputer, one or more operating systems, user applications, backgroundservices, background applications, etc.

The computer programs may include: (i) descriptive text to be parsed,such as HTML (hypertext markup language) or XML (extensible markuplanguage), (ii) assembly code, (iii) object code generated from sourcecode by a compiler, (iv) source code for execution by an interpreter,(v) source code for compilation and execution by a just-in-timecompiler, etc. As examples only, source code may be written using syntaxfrom languages including C, C++, C#, Objective C, Haskell, Go, SQL, R,Lisp, Java®, Fortran, Perl, Pascal, Curl, OCaml, Javascript®, HTML5,Ada, ASP (active server pages), PHP, Scala, Eiffel, Smalltalk, Erlang,Ruby, Flash®, Visual Basic®, Lua, and Python®.

None of the elements recited in the claims are intended to be ameans-plus-function element within the meaning of 35 U.S.C. § 112(f)unless an element is expressly recited using the phrase “means for,” orin the case of a method claim using the phrases “operation for” or “stepfor.”

U.S. Provisional Patent Application No. 62/686,333 titled Multi-Path orMulti-Stage Cache Improvement filed on Jun. 18, 2018, is incorporated byreference in its entirety herein and the contents of the incorporatedreference, including figures, should be considered as being part of thispatent application.

What is claimed is:
 1. A data storage and access system for use with aprocessor comprising: a processor, having processor cache, the processorconfigured generate a data request for data; a final level cache (FLC)cache system, configured to function as main memory and receive the datarequest, the FLC system comprising: a first FLC module having a firstFLC controller and first memory, the first FLC module receiving the datarequest from the processor; a second FLC module having a second FLCcontroller and second memory, the second FLC module receiving,responsive to the first FLC module not having the data requested by theprocessor, the data request from the first FLC module; and a storagedrive configured with a main memory portion such that the storage drivereceives the data request responsive to the second FLC module not havingthe data requested.
 2. The system of claim 1 wherein the data requestincludes a physical address and first FLC controller includes a loop-uptable configured to translate the physical address to a first virtualaddress.
 3. The system of claim 2 wherein if the first FLC controllerlook-up table does not contain the physical address, the first FLCcontroller is configured to forward the data request with the physicaladdress to the second FLC controller.
 4. The system of claim 3 whereinthe second FLC controller includes a loop-up table configured totranslate the physical address to a second virtual address.
 5. Thesystem of claim 4 wherein if the second FLC controller look-up tabledoes not contain the physical address, the second FLC controller isconfigured to forward the data request with the physical address to thestorage drive.
 6. The system of claim 1 wherein the first FLC module isfaster and has lower power consumption than the second FLC module. 7.The system of claim 1 wherein the first memory is DRAM and includes afirst memory controller and the second memory is DRAM and includes asecond memory controller.
 8. The system of claim 1 wherein the storagedrive is a magnetic disk driver, solid state memory or a hybrid drive.9. The system of claim 1 wherein the DRAM is serial DRAM.
 10. The systemof claim 1 wherein the first FLC module is at least two times as fast asthe second FLC module.
 11. The system of claim 1 wherein the first FLCmodule and the second FLC module are configured to perform predictivefetching of data stored at addresses expected to be accessed in thefuture.
 12. A method of operating a data access system, wherein the dataaccess system comprises a processor having processor cache, a storagedrive, a first final level cache (FLC) module which includes a first FLCcontroller and a first DRAM and a second FLC module which includes asecond FLC controller and a second DRAM, the method comprising:generating, with the processor, a request for data which includes aphysical address; providing the request for data to the first FLCmodule; determining if the first FLC controller contains the physicaladdress; responsive to the first FLC controller containing the physicaladdress, retrieving the data from the first DRAM and providing the datato the processor; responsive to the first FLC controller not containingthe physical address, forwarding the request for data and the physicaladdress to the second FLC module; determining if the second FLCcontroller contains the physical address; and responsive to the secondFLC controller containing the physical address, retrieving a cache linecontaining the data from the second DRAM and providing the cache line tothe first FLC module.
 13. The method of claim 12 wherein determining ifthe first FLC controller contains the physical address comprisesaccessing an address cache storing address entries in the first FLCcontroller to reduce time taken for the determining.
 14. The method ofclaim 12 further comprising responsive to the second FLC controller notcontaining the physical address, forwarding the request for data and thephysical address to the storage drive.
 15. The method of claim 14,further comprising the storage drive retrieving the data from a portionof the storage drive reserved as main memory, and providing the data tothe second FLC module.
 16. The method of claim 12 further comprising,responsive to the first FLC controller containing the physical addressand the providing of the data to the processor, updating a statusregister reflecting the recent use of a cache line containing the data.17. The method of claim 12 wherein retrieving the data from the secondDRAM and providing the data to the first FLC module further comprisesstoring the physical address in the first FLC controller and storing thedata in the first DRAM.
 18. The method of claim 17 wherein if the firstDRAM does not have available space, then removing least recently useddata from the first DRAM to make space for the data.
 19. A data storageand access system for use with a processor comprising: a processor,having processor cache, the processor configured to generate a firstdata request for first data and a second data request for second data; afirst final level cache (FLC) cache system, communicating with theprocessor, configured to function as main memory cache and receive thefirst data request for the first data; a second FLC cache system,communicating with the processor, configured to function as main memorycache and receive the second data request for the second data; a storagedrive configured with a main memory partition such that the main memorypartition of the storage drive functions as main memory.
 20. The systemof claim 19 further comprising a system bus and the processorcommunicates with the first FLC cache system and the second FLC cachesystem over the system bus such that addresses assigned to each FLCcache system are interleaved.
 21. The system of claim 19 wherein: if thefirst data is not contained in the first FLC cache system, then thefirst data request is sent to the storage drive to retrieve the firstdata from the main memory partition of the storage drive; and if thesecond data is not contained in the second FLC cache system, then thesecond data request is sent to the storage drive to retrieve the firstdata from the main memory partition of the storage drive.
 22. The systemof claim 19 wherein the first FLC cache system comprises a first FLCmodule and a second FLC module and the second FLC cache system comprisesa third FLC module and a fourth FLC module.
 23. The system of claim 22wherein each of the FLC modules comprises a FLC controller and a memory.24. The system of claim 23 wherein the each FLC module maintainsdedicated and unique look-up tables.